随笔分类 - WPF
摘要:场景:工具栏上有很多图标(一个图标代表一种控件),可以左键按下图标,然后拖拽到设计区域创建一个个的控件。实现:1.给工具栏上的图标添加MouseLeftDown和MouseMove事件,前者事件是为了告诉Move事件我的确按下了左键,同时也可以在MouseDown事件中初始化一些标识;在后者 中经过自己的逻辑判断,看看是否可以拖拽了(一般就是判断自己的标识,比如是否按下了左键,这样的判断),如果可以则加入如下代码: DragDrop.DoDragDrop(sourceControl, data, DragDropEffects.Copy); 第一个参数就是进行拖拽的控件,第二个...
阅读全文
摘要:有时候我们可能在Panel(StackPanel、Canvas、Grid)上或者是在一些默认不支持Focus的控件上添加了KeyDown或者KeyUp,可是残酷的现实告诉我们,这是无法触发的,怎么办呢,很简单,只需一句代码。 private void MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { Grid1.Focus(); }也就是在鼠标单击事件中,让容器(或者其他控件)调用Focus方法,使其尝试获得焦点。小伙伴们是不是尝试过后发现还是不行,哈哈哈,那...
阅读全文
摘要:前言:对于此操作,我只想说是微软的神经,还是我的笨蛋。为什么EventTrigger就不能像Trigger那样直接设置Property以及Value就对属性进行操作,而必须要放一个Action,而默认的Action只有三个,其中两个为动画,一个为播放声音,我只想说,可以洗洗睡了。正题:在EventTriigger中修改属性的值,怎么做呢,我们都知道EventTrigger中只有Action可以使用,而Action的操作中我们也只能使用StoryBoard来操作,难道我们也要通过动画修改各种属性?没错,就是这样,殊不知动画不仅支持Double、Color、Point,它还支持Object哦,待我
阅读全文
摘要:描述:开发中完成了一个类似于Word的悬浮工具栏功能,选中文本之后可以自动弹出一个工具栏。可以修改字体、字体大小等功能,问题来了,我发现当去进行操作的时候原本选中的RichTextBox的内容的颜色会变为白色,其实仍然是选中状态,可是颜色消失了。查找了大量资料都认为是LostFocus搞的鬼,经过多次试验得出一个结论,那就是重写下LostFocus的事件。开工:上文中提到认为是LostFocus搞的鬼,RichTextBox有两个LostFocus,OnLostFocus和OnLostKeyboardFocus,两者的区别是前者为鼠标的焦点,后者为键盘的焦点。但是在测试中发现只会进入后者,而不
阅读全文
摘要:如果前两篇的博客太为普通,那么接下来的内容将让你动画实在是太厉害了。本文将会介绍两个关于纯手工实现动画的形式,当然动画效果就不用我多说了。基于帧的动画:此处的帧并不是之前介绍的Animation这样的动画,之所以称之为帧,那是因为它控制范围更加精细。也就是说,在有些应用程序方案中,你需要根据每个帧控制呈现,使那么就可以基于每个帧回调来创建自定义动画。基于帧的动画主要使用CompositionTarget对象的一个回调函数来实现,CompositionTarget表示应用程序的显示图面,其回调函数将会在1秒之内被访问60次,所以也就可以实现动画的过程(一般来说此种动画会在游戏的时候使用,因为它每
阅读全文
摘要:上一篇文章简单介绍了动画的定义方法和一些控制动画的方法,并没有涉及复杂属性的动画处理方式,本文将继续动画的其它方面的使用。写在前面(对于一些动画操作时候的建议):1.如果希望某个元素从显示到消失,或者从消失到显示,使用Visibility属性是无效的,因为此属性没有一个动画的过程,所以使用Opacity控制透明度进行操作;2.如果要修改元素的位置则可以使用Canvas.Left或者Canvas.Top设置是RenderTransform(下文会涉及);3.可以使用ColorAnimation修改元素的Brush,如果是比较复杂的aBrush,则可以使用DoubleAnimation来修改Off
阅读全文
摘要:定义动画:直接使用Element进行BeginAnimation DoubleAnimation animation = new DoubleAnimation(); animation.By = 100; animation.Duration = TimeSpan.FromSeconds(1); btnTest.BeginAnimation(Button.WidthProperty, animation);也可以将Animation添加到StoryBoard中去,这样可以一次执行多个动画: ...
阅读全文
摘要:本文主要是以实现拖动元素作为例子。创建Behavior:通常这个类会继承自Behavior,其中T就是此Behavior服务的对象,在此处使用的是UIElement,也就是虽有的UIElement类型的元素都可以使用。 public class DragInCanvasBehavior : Behavior { //元素父节点 private Canvas canvas; //标识是否进入拖动 private bool isDraging = false; //按下鼠标时的坐标(用于计算要移动的位置) p...
阅读全文
摘要:其实代码蛮简单的,在元素的DragOver事件中加入如下代码: Point svPoint = e.GetPosition(sv); if (sv.ActualHeight-svPoint.Y <= 20) { sv.ScrollToVerticalOffset(this.sv.VerticalOffset + 5); } if (Math.Abs(svPoint.Y) <= 20) { sv.ScrollTo...
阅读全文
摘要:说在前面:WPF中给按钮或者是具备Command等元素实现快捷键其实是非常简单的,例子如下: XAML代码很简单,一个Button,设置了Content和事件,细心的小盆友会发现Content的前缀是一个_,这个可不是一般的下划线哦,因为你在运行时候是看不到这个下划线的,这就是快捷键的神奇之处,现在运行程序按下 "Alt+T",你会发现好神奇竟然执行了Click事件。解释:WPF中的快捷键定义规则是在文本的前边加上下划线,然后按下Alt和下划线后的字母即可实现,比如上例子中我们下划线后边的是T,所以我们按下Alt+t就可以实现快捷操作,当然你也可以是A--Z都ok的。窃喜:
阅读全文
摘要:前记:WPF中的样式使用一般分为两种Statci和Dynamic.两者的区别可以理解为,前者在运行的时候已经确定了样式的风格,而后者可以根据资源在运行时的修改而修改也可以使用那些在运行时才存在的资源。背景:有时候我们会将样式的资源和XAML页面代码分离,有时候也希望同一个资源可以在多个Application中使用;另外还有一个更致命的问题,如果我们在很多地方都写了重复的样式,突然有一天我们要修改,那岂不是要一个一个地方进行修改,那工作量实在不敢想象。好在WPF中提供了解决这个问题的好方法,那就是ComponentResourceKey(定义或引用基于外部程序集中的类名以及一个附加标识符的资源键
阅读全文
摘要:一、准备好你要使用的字体文件,以TTF结尾的文件,然后复制到项目中,并设置Build Action(生成操作)为Resource(资源);二、在App.xaml中或者你需要的地方添加资源的定义: /WpfApplication5;Component/#超世纪细圆体 /WpfApplication5;Component/#腾祥孔淼卡通繁 上述代码实在App.xaml中添加,FontFamily的Key自定义,反正就是一个名字,后边的字符串其实就是一个字体名字的引用;/WpfApplication5;component/这些是固定的,意思就是WpfApplicat...
阅读全文
摘要:一、新建一个资源文件,然后设置其Build Actoin(生成操作)为Resource(资源);二、在App.xaml.cs的StartUp事件或者是你需要的时机代码段写上如下代码: ResourceDictionary languageResDic = new ResourceDictionary(); languageResDic.Source = new Uri("Dictionary1.xaml", UriKind.RelativeOrAbsolute); this.Resources.MergedDictionarie...
阅读全文
摘要:private void KeyDown(object sender, KeyEventArgs e) { if (e.Key== Key.Up && Keyboard.Modifiers== ModifierKeys.Alt) { } }上述代码看起来蛮正常,但是很遗憾,当我们按下向上键和Alt键时候是无效的,可是当按下Ctrl和向上键就是ok的,很是无语,好在有了下边的代码。 private void KeyDown(object sender,...
阅读全文
摘要:本文主要讲解WPF中的基本图形知识,内容如下:1。图形的基础知识准备2。WPF中的图形体系结构3。颜色和画刷4。Shape5。Drawing和Visual1.1WPF中的坐标1.1.1 WPF的默认坐标:WPF中平面坐标系主要包括原点位置、X和Y轴方向,以及坐标单位。WPF的默认坐标系原点位置在绘制区域的左上角,X轴向右增加,Y轴向下增加。 自定义坐标系:自定义坐标系主要通过Transform类来实现,一般可以使用ScaleTransform和TranslateTransform来进行坐标的反转和水平移动,如下: <Canvas> <Canvas.RenderTransfo.
阅读全文
摘要:在Silverlight和WPF中数据绑定都是使用Binding表达式来进行数据的绑定,当然这种方法的优点不仅仅是使用简单,和其强大的功能也存在直接的联系。先看个Sample吧:<Grid> <Grid.Resources> <local:User x:Key="currentUser"></local:User> </Grid.Resources> <Grid.RowDefinitions> <RowDefinition Height="35"></RowDefi
阅读全文
摘要:为依赖属性增加属性值继承的特性通常我们会给某一个控件(元素)添加依赖属性,如果希望这个依赖属性的改变可以影响到当前窗体中所有拥有此属性的元素,那么就需要属性值得继承特性;思路如下:有如下自定义按钮类:public class SpaceButton : Button { // 传统.Net做法 私有字段搭配一个公开属性 string txt; public string Text { set { txt = value; Cont...
阅读全文
摘要:提到样式应该要追溯到 Html中的CSS样式了,通常是为了使多个元素(控件)达到一个效果(外观或者拥有相同的功能);当然,在WPF中也有类似于CSS这样,不过肯定是比CSS更要强大的哦。基本使用 <StackPanel> <Button Height="50" Margin="0 10 0 0" Background="Beige" Width="100"> <Button.RenderTransform> <RotateTransform Angle="45&q
阅读全文
摘要:WPF中的资源有两种,一种称为"程序集资源"(assembly resource),另一种称为"对象资源"(object resource)也称为"逻辑资源",WPF中统称后者为"逻辑资源"。一、程序集资源应用程序中的XAML、图片、音频、视频等文件,都可以将其作为程序集资源组织起来。程序集资源可以以以下3种方式打包:1.资源文件(Resource File):直接嵌入到程序集中。2.内容文件(Content File):该文件的相关信息会编译到程序集中,如文件的相对位置。3.Site of Origin文件:不参
阅读全文
摘要:如果Page1成功导航到Page2,首先会触发NavigationService的Navigating事件,标识导航开始。随后创建Page2对象,并且触发NavigationProgress事件。该事件用于提供导航进度信息,每次返回1KB数据就会引发该事件。随后触发Navigated事件,LoadCompleted紧随其后,这时表明页面已经下载完毕。Page1触发UnLoaded事件,宣告其结束。Page2触发Loaded事件,表明其开始。上图表示了从Page1成功导航到Page2页面经过的完整事件。第二张图表明了在同一个页面中从一个段落导航到另一个段落的过程。除去触发Navigating、N
阅读全文

浙公网安备 33010602011771号