和依赖属性类似,路由事件的声明也是static静态类型并辅以路由事件的关键字RoutedEvent,通过调用EventManager类的RegisterRoutedEvent方法来注册这个事件,当然类同普通的依赖属性,也可以利用addhandler和removehandler方法来对其封装以使得可以按照.net常规的调用方式使用事件,值得注意的是:如果父类包含有事件的addhandler或removehandler方法,则应该复用这些方法。路由事件利用其自身继承到的AddOwner方法可以给其他类进行复用;调用父类的RaiseEvent来触发事件,由此可以看出路由事件基本用于UIElement以及其他GUI元素。

对于提供了常规.net封装的路由事件可以使用+=或-=操作符来进行事件处理,当然也可以直接使用addhandler或者removehandler来移除事件处理方法的绑定

WPF吸取了常规。net事件的处理模式,也增加了自己的一些处理方式比如直接模式即直接由触发者进行处理,其次就是吸收了以前gridview、listview等容器控件的事件处理方式即冒泡(向上)传递,最后就是隧道模式(个人理解为从粗到细)传递,通常WPF会成对的定义冒泡和隧道事件,并且隧道路由事件会先于冒泡路由事件触发,若隧道路由事件被标记已处理后冒泡路由事件将忽略掉当前处理者。路由事件携带的信息相对以前多了初始源以及上一处理者、是否处理以及路由事件类型的信息以便处理。

posted on 2012-10-11 13:50  From Ocean  阅读(261)  评论(0编辑  收藏  举报