摘要: 上一篇文章中谈到了BulletDecorator控件,就是为自定义CheckBox控件的模板做准备,因为CheckBox需要比较严格的布局,正好,BulletDecorator控件就合适了,该控件的布局是有项目列表,排列起来好办很多了。第一步,先建立一项资源,就是控件的聚焦样式,即当你在窗体中不断按Tab键使控件获取焦点时的样式,后面要用到。 <!--当控件获得键盘焦点时的样式--> <Style x:Key="FocusStyle"> <Setter Property="Control.Template"> < 阅读全文
posted @ 2011-11-13 21:04 东邪独孤 阅读(405) 评论(0) 推荐(1)
摘要: 这是一个很简单的控件,无非就是控制项目的布局方式,其布局方式只有两种:从左到右,从右到左。一、从左到右二、从右到左布局方向由FlowDirection属性来决定,所以我说这个控件非常简单上面的截图的XAML如下: <BulletDecorator HorizontalAlignment="Center" Background="#AACC01" VerticalAlignment="Center" Height="21" Width="76" FlowDirection="Rig 阅读全文
posted @ 2011-11-13 11:58 东邪独孤 阅读(1656) 评论(0) 推荐(0)
摘要: ProgressBar控件与传统WinForm使用方法完全一样,我们只需关注:Minimum——最小值,默认为0;Maximum——最大值,默认为100.Value——当前值。关键是它的控件模板,因为系统的默认主题不好看,很多时候我们是需要自定义样式和模板。老方法,先看定义:[TemplatePartAttribute(Name = "PART_Track", Type = typeof(FrameworkElement))][TemplatePartAttribute(Name = "PART_Indicator", Type = typeof(Fra 阅读全文
posted @ 2011-11-12 21:59 东邪独孤 阅读(489) 评论(0) 推荐(0)
摘要: 这个控件,真不好介绍,MSDN上也是草草几句,反正就是可以让用户拖动的玩意儿,但是,你会发现,当你在该控件上拖动时,它没有反响,也就是说这个东西默认不做任何操作的,它是赖在那里什么都不干,除非你去踢上脚。而且,这个控件就像一个四方鸭,你踢一脚它就前进一步,你不踢,它又在那里尸位素餐,什么都不干了。还是用一个例子来说明吧,不过,还是先说一下重要的东西。Thumb有几个核心事件,都是与拖动有关。往深一层想,它是什么?对,就是我们常见的滚动条里面的滑块,就是我们在网格里面可以拖动的分隔线,就是窗口右下角用于通过拖动来改变窗口大小的小东西。Thumb的核心事件有:DragStarted——当你在它上面 阅读全文
posted @ 2011-11-11 23:23 东邪独孤 阅读(641) 评论(0) 推荐(0)
摘要: 欢迎加入微群 DotNet中国:http://qun.t.qq.com/67176884在WPF中获Listview中选中的项,与WinForm里面有着很大的区别,要亲身去研究一下在WPF中如果处理,其实也不难,来,下面我们一起来通过一个简单的示例来感悟一下吧。第一步就是建立一个WPF应用程序项目,这个不用描述了,节省了31个字。第二步,为了实现数据绑定,先写一个简单的员工类,包含三个属性——姓名、年龄、城市。 public class Emp { public string Name { get; set; } public int Age { get... 阅读全文
posted @ 2011-11-08 20:59 东邪独孤 阅读(1375) 评论(0) 推荐(0)
摘要: 我很奇怪的是,微软那厮是怎么搞的,Blend里面居然不能编辑GridView的样式,十万般无奈之下,只好手写XAML来处理了。要想知道一个控件的样式是如何设置,看控件类的定义很重要,我们来看看GridView是如何定义的:[StyleTypedPropertyAttribute(Property = "ColumnHeaderContainerStyle", StyleTargetType = typeof(GridViewColumnHeader))][ContentPropertyAttribute("Columns")]public class G 阅读全文
posted @ 2011-11-08 08:30 东邪独孤 阅读(355) 评论(0) 推荐(0)
摘要: 千万不要认为WPF中的数据绑定会很复杂,尽管它的确比Winform程序灵活多了,但其本质是不变的,特别是ComboBox控件,我们知道在Winform中对该控件的有两个专为数据绑定而设定的属性——DisplayMenber和ValueMenber,分别绑定用于显示和用于存放用户选择值两个字段,最典型的应用类似于key-value形式的数据字段,如学生表中的学号(ID)和学生姓名。其实,在WPF中原理都是一样的,来,我们一起动手玩玩。如何新建应用程序就不用介绍了,省略33个字。在窗口中拖放一个ComboBox控件和一个按钮,按钮用来检测所选择的值。切换到代码视图,定义一个Employee类和一个 阅读全文
posted @ 2011-11-06 21:55 东邪独孤 阅读(520) 评论(0) 推荐(0)
摘要: 本系列文章,是从我的QQ空间转过来的。上一文中,我们分析了依赖项属性的注册和定义方法,并解释了依赖项属性的注册过程,但是,有一个疑问会困惑着我们,既然依赖项属被声明为静态只读字段,那为什么它的值可以被改变呢?难道你不觉得很奇怪吗?微软的葫芦里到底卖的什么药呢?我们来看看。前文中我们提到过,设置依赖项属性的值使用SetValue方法,那好,我们就从SetValue方法入手。SetValue方法的定义如下:public void SetValue(DependencyProperty dp, object value){ base.VerifyAccess(); PropertyMet... 阅读全文
posted @ 2011-11-06 11:31 东邪独孤 阅读(467) 评论(0) 推荐(1)
摘要: 在上一文中,我们用传统面向对象的方法来定义了一个类,而我们同时把该类的实例绑定到两个文本框,第一个文本框用于输入值,第二个文本框用于根据第一个文本框中的输入来取得属性值。在上例中我们已经明了,虽然能做到同步更新,但这同步更新并不是实时的。而是在控件失去焦点或点击按钮之后才发生,因为那个时候是重新进行了绑定,所以,一般的属性声明并没有实现实时更新。下面,我们把Student类进行改动,把Name属性改为依赖项属性。 public class Student:DependencyObject { //注册依赖项属性 public static readonly DependencyProperty 阅读全文
posted @ 2011-11-06 11:26 东邪独孤 阅读(375) 评论(1) 推荐(2)
摘要: 本系列文章是从我的QQ空间拷过来的。依赖项属性可以称得上是WPF中比较难理解的概念,为了搞清楚这个概念,我都把.NET类库进行了反编译,但是,其结果我也是想到了的,微软不是傻子,.NET那么庞大,就算能被你反编译了,你也看不懂它的代码。所以说,经过我一番研究,虽然没有把.NET的每一行代码都弄明白,不过,黄天终不负有心人,依赖项属性的使用方法与基本原理,我可以说已经弄明白了,恰巧,前两天在网上看到一篇讨论依赖项属性的文章,写得还不错,作者估计也是一位高人,再加上我个人的研究,从实际应用的角度来说,我现在已经掌握了依赖项属性的使用方法了,不妨告诉你,其实很简单,可以这么说,整个WPF都很简单,和 阅读全文
posted @ 2011-11-06 11:22 东邪独孤 阅读(370) 评论(1) 推荐(1)