2013/08/27 C# WPF 学习笔记

来源:互联网 发布:免费房产中介软件 编辑:程序博客网 时间:2024/05/16 12:22

事件系统在WPF中也被升级——进化成为路由事件(Routed Event),并在其基础上衍生出命令传递机制。

这些机制在很大程度上减少了对程序员的束缚,让程序的设计和实现更加灵活,模块之间的耦合度也进一步降低。


路由(Route)一词的大意是这样:起点与终点间有若干个中转站,从起点出发后经过每个中转站时要做出选择,

最终以正确(比如最短或者最快)的路径到达终点。编程的本质是用编译器(有时要借助类库)来扩展操作系统的功能,

所以,程序的基本运行不可能脱离操作系统——Windows本身就是一种消息驱动的操作系统,所以我们的程序注定

都是消息驱动的,程序运行的时候也要把自己的消息系统与整个操作系统的消息系统“连通”才能够被执行和响应。


纵观几代Windows平台程序开发,最早的WindowsAPI开发(C语言)和MFC开发我们可以直接看到各种消息并可以

定义自己的消息;到了COM和VB时代,消息被封装为事件(Event)并一直沿用至.NET平台开发——无论怎么说,程序间

模块使用消息互相通信的本质是没有改变的。

从WindowsAPI开发到传统的.NET开发,消息的传递(或者说事件的激发与响应)都是直接模式的,即消息直接由发送者

交给接受者(或者说事件宿主发生的事件直接由事件响应者的事件处理器来处理)。

WPF把这种直接消息模型升级为可传递的消息模型——WPF的UI是由布局组件和控件构成的树形结构,

当这棵树上的某个结点激发出某个事件时,程序员可以选择以传统的直接事件模式让响应者来响应之,

也可以让这个事件在UI组件树沿着一定的方向传递且路过多个中转结点,并在这个路由过程中被恰当地处理。

你可以把WPF的路由事件看成是一只小蚂蚁,它可以从树的基部向顶部(或反向)目标爬行,每路过一个树枝

的分叉点就会把消息带给这个分叉点。


WPF事件的路由环境是UI组件树。

WPF中有两种“树”:一种叫逻辑树(Logical Tree);一种叫可视元素树(Visual Tree)。

Logical Tree最显著的特点就是它完全由布局组件和控件构成(包括列表控件中的条目元素),换句话说就是

它的每个结点不是布局组件就是控件。

如果把一片树叶放在放大镜下观察,你会发现这片叶子也像一颗“树”一样——有自己的基部并向上生长出多级分叉。

在WPF的Logical Tree上,充当叶子的一般都是空间爱你,如果我们把WPF的空间也放在“放大镜”下去观察,你会

发现每个WPF控件本身也是一颗由更细微级别的组件(它们不是控件,而是一些可视化组件,派生自Visual类)组成的树。

用来观察WPF控件的放大镜是我们前面提及的Blend,使用Blend可以解剖并观察一个控件的模板(Template)




原创粉丝点击