WPF 路由事件(一)
2013-03-28 14:34 残月星辰 阅读(1151) 评论(1) 编辑 收藏 举报1. 定义、注册、包装路由事件
WPF事件模型与WPF属性模型类似,在依赖项属性一样,路由事件由只读的静态字段表示,在一个静态构造函数中注册,并且通过一个标准的.NET事件定义进行包装。
例如 Button类提供了熟悉的CLick事件,该事件继承来自抽象的ButtonBase基类,下面的代码说明了该事件是如何被定义和注册的:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Windows; 6 using System.Windows.Controls; 7 8 namespace SCADA.HMI.Windows 9 { 10 public abstract class ButtonBase :ContentControl 11 { 12 13 /// <summary> 14 /// 定义事件 15 /// </summary> 16 public static readonly RoutedEvent ClickEvent; 17 /// <summary> 18 /// 注册事件 19 /// </summary> 20 static ButtonBase() 21 { 22 ButtonBase.ClickEvent = EventManager.RegisterRoutedEvent 23 ("Click", RoutingStrategy.Bubble, 24 typeof (RoutedEventHandler), 25 typeof (ButtonBase)); 26 } 27 28 /// <summary> 29 /// 添加删除已注册的调用程序 30 /// </summary> 31 public event RoutedEventHandler Click 32 { 33 add { AddHandler(ButtonBase.ClickEvent,value); } 34 remove { RemoveHandler(ButtonBase.ClickEvent,value); } 35 } 36 } 37 }
总结:虽然依赖项属性时使用DependencyProperty.Register()方法注册,而路由事件是使用EventManager.RegisterRoutedEvent()方法注册的。当注册事件时,
需要指定事件的名称、路由类型、定义事件处理程序语法的委托以及拥有该事件的类。
通常,路由事件通过普通的.NET事件进行包装,从而使所有.Net语言都能够访问他们。事件包装器可以使用AddHandler()和RemoveHander()添加和删除已注册的调用程序,
这两种方法都是在FrameWorkElement基类中定义的并被WPF元素继承。
(未完待续.......)