七月 6

wpf之如何理解路由事件(Routed Event)

初学者看到路由事件这个名字的时候都会不禁好奇:这个路由指的是什么?和我们家里平时用的路由器有关系吗?

事实上,无论是我们家里用的路由器,还是路由事件,名字中的路由的概念是一样的,他们都表示起点与终点间有若干个中转站,从起点出发后经过每个中转站时要做出选择,最终以正确(比如最短或者最快)的路径到达终点。

作为程序员来说,我们编程的本质是通过编译我们所写的代码来扩展操作系统的功能,所以,程序的基本运行不可能脱离操作系统。要正确理解路由事件首先需要正确理解wpf所依赖的操作系统,Windows操作系统。

Windows操作系统本身就是一种消息驱动的操作系统,所以我们的程序注定都是消息驱动的,程序运行的时候也要把合己的消息系统与整个操作系统的消息系统“连通”才能够被执行和响应。

纵观几代 Windows 平各理序开发,最早的windowsAPI开发(C语言)和MFC开发我们可以直接看到各种消息并可以定义自己的消息。到了COM和VB时代,消息被封装为事件(Event)并一直沿用至.NET平台开发。

无论怎么说,程序间模块使用消息互相通信的本质是没有改变的。从Windows API开发到传统的.NET开发,消息的传递(或者说事件的激发与响应)都是直接模式的,即消息直接由发送者交给接收者(或者说事件宿主发生的事件直接由事件响应者的事件处理器来处理)。WPF把这种直接消息模型升级为可传递的消息模型。

前面我们已经知道WPF的UI是由布局组件和控件构成的树形结构,当这棵树上的某个结点激发出某个事件时,程序员可以选择以传统的直接事件模式让响应者来响应之,也可以让这个事件在UI组件树沿着一定的方向传递且路过多个中转结点,并在这个路由过程中被恰当地处理。你可以把WPF的路由事件看成是一只小蚂蚁,它可以从树的基部向顶部(或反向)目标爬行,每路过一个树枝的分又点就会把消息带给这个分叉点。

关于wpf中的路由事件就给大家介绍到这里。希望通过我的简单描述,大家能够更加直观的理解wpf中的路由事件。



文章由安静原创,发表于www.ajnote.com。转载请注明出处

发表 2019年7月6日 自 anjing 类别 "C#学习笔记

发表评论

电子邮件地址不会被公开。 必填项已用*标注