摘要: 前面关于ControlTempalte的Post当中,只说明了如何定义的外观。如果对于很复杂的自定义控件,通常我们还需要在ControlTemplate使用Resource。很显然,Resource的目的是便于实现元素的重用。另外,我们的自定义模板通常是在XAML中完成的,因为用代码实现是非常烦琐的。对于小的应用程序,这个ControlTemplate一般直接定义在XAML的根元素。对于大的应用程序,通常应该定义在专门的资源XAML文件中,根元素是ResourceDictionary。 阅读全文
posted @ 2007-01-17 14:17 赖仪灵 阅读(5747) 评论(4) 推荐(2) 编辑
摘要: 在DWM中,我们的每个窗口都用一个Surface表示,都可以看到为是3D的网格。虽然每个窗口还是一个矩形,但它们都位于一个3D空间之中。窗口的操作,比如最大化,还原等等,都发生了变化,它们都是对网格进行3D变换实现的。与以往有了很大的区别。天下没有免费的午餐,为了实现这些功能,并且解决一些由它所引出的问题,微软提出了Windows显示驱动模型(Display Driver Model)。WDDM是Vista及以后操作系统的新的DirectX驱动模型。WDDM主要提供三项功能:1、虚拟化视频内存。2、允许与GPU的交互。3、允许DirectX表面可以跨进程共享。 阅读全文
posted @ 2007-01-16 17:09 赖仪灵 阅读(4341) 评论(7) 推荐(0) 编辑
摘要: 通过前面的介绍,我们已经知道WPF支持用Style Setters修改控件的属性值,以改变控件的外观。我们知道,WPF的任何控件都有视觉树和逻辑树。但是Style有它自己的局限性:它只能修改控件已有树型结构的属性,不能修改控件的树型层次结构本身。而在实际运用中,我们常常需要对控件进行更高级的自定义。此时,可以需要使用ControlTemplate才能实现。 阅读全文
posted @ 2007-01-15 17:06 赖仪灵 阅读(8652) 评论(1) 推荐(4) 编辑
摘要: Style是一种修改属性值是方法。我们可以将其理解为对属性值的“批处理”。对“批处理”大家应该不会感到默认。对,通过Style我们可以批量修改属性的值。 阅读全文
posted @ 2007-01-12 22:17 赖仪灵 阅读(6730) 评论(8) 推荐(3) 编辑
摘要: 桌面窗口管理器是什么呢?它是Vista中的一个新组件:Desktop Window Manager(DWM)。它建立在WPF核心图形层组件基础之上。还记得我在第一个Post中所提到的Composition引擎吗?DWM的桌面合成就是建立在这个Composition引擎基础之上的新特征。它的出现几乎改变了Vista中应用程序的屏幕象素显示方式。通过DWM的桌面合成,应用程序的显示不再是直接画到屏幕上,而是一个显示内存中的一个离屏Surface。然后由DWM将这些Surface合成显示到屏幕之上。 阅读全文
posted @ 2007-01-11 22:23 赖仪灵 阅读(3865) 评论(3) 推荐(2) 编辑
摘要: 最近比较忙些,好多天没有写WPF了。今天,我们继续回到前面的话题:WPF中的数据处理。前面讲过,通过实现INotifyPropertyChanged,我们可以改变使任意的CLR对象支持WPF的绑定源。但是,INotifyPropertyChanged通常只应用在单个的类属性上。在现实应用中,我们还会遇到另外一种情况:我们需要监视某一堆的数据是否发生变化。也就是说我们绑定的数据源不再是一个单独数据对象。比如,绑定源是一个数据表时,我们希望在表中任何一条数据发生变化就能得到通知。 阅读全文
posted @ 2007-01-10 14:39 赖仪灵 阅读(5081) 评论(4) 推荐(1) 编辑
摘要: 前一个Post当中介绍了WPF如何处理事件的传递过程。如何定义传递事件,并且对事件进行了分类。现在,我们看看WPF到底是如何处理Bubbling和Tunneling事件的。最后介绍了Attached事件。 阅读全文
posted @ 2007-01-07 15:49 赖仪灵 阅读(5421) 评论(5) 推荐(4) 编辑
摘要: WPF在.NET简单事件通知之上添加了很多基础结构。传递事件的设计使得事件可以与元素树一起很好的工作。事件发生后,可以在视觉树和逻辑树自动地进行上下传递,我们不需要添加任何额外的代码。传递事件使得我们不需要过多关注于视觉树,这样封装对于我们理解WPF的元素合成非常重要。比如,我们点击一个按钮的事件,在点击的时候我们实际上点击的是一个ButtonChrome或者TextBlock,也就是说我们点击的是Button的内容元素。正是因为事件可以沿视觉树传递,Button才发现这个事件,并且可以处理。因此,我们可以给Button的Content当中添加任意的元素,而不会对事件有任何的影响。如果没有这样的事件传递,我们点击Button内的元素时,必须手动编写代码触发Button点击事件。 阅读全文
posted @ 2007-01-03 14:06 赖仪灵 阅读(9260) 评论(15) 推荐(2) 编辑
摘要: 在前一个Post当中,我从资源编译行为的角度讨论了WPF中的资源。但是,不管是Resource还是Content都是在编译时声明资源。如果我们打破这个限制,不希望指定完全确认的资源地址。WPF提供了一种类似IE地址定位的抽象,它根据应用程序部署的位置决议。 阅读全文
posted @ 2007-01-02 21:44 赖仪灵 阅读(5029) 评论(1) 推荐(1) 编辑
摘要: 继续相同的话题:WPF中的资源。这次我将尝试从另外一个角度来分析WPF中的资源:资源编译行为,以及如何根据应用程序的需要选择适当的类型。 阅读全文
posted @ 2006-12-31 23:01 赖仪灵 阅读(5803) 评论(1) 推荐(3) 编辑