在上一篇博文中写到了内置路由事件,其实除了内置的路由事件,我们也可以进行自界说路由事件。接下来我们一起来看一下WPF中的自界说路由事件怎么进行创建吧。
创建自界说路由事件分为3个法式:
1、声明并注册路由事件。
2、操作CLR事件包装路由事件(封装路由事件)。
3、创建可以激发路由事件的要领。
此刻我们一起创建一个能够呈报当前时间和当前位置信息的路由事件,一起去控件里面游览一番。此刻开始创建自界说路由事件
一、声明自界说路由事件
创建担任RoutedEventArgs类的派生类ReportCurrentLocationEventArgs用来携带时间和位置动静,,ClickTime属性是用来存储时间,CurrentLocation属性是用来存放位置
二、界说注册路由事件
我们用EventManager.RegisterRoutedEvent要领来注册的参数有4个。代码如下:
public static readonly RoutedEvent ReportCurrentLocationEvent =EventManager.RegisterRoutedEvent
("ReportCurrentLocation", RoutingStrategy.Bubble, typeof(EventHandler<ReportCurrentLocationEventArgs
>), typeof(ButtonReportCurrentLocation));
第一个参数是路由事件的名称Name。
第二个参数是路由事件的通报方法,有三种方法:
第一种是Bubble是冒泡模式,这种模式是从触发点向上通报,知道最外层。
第二种是Direct就是传统的事件一样的,不会通过元素树。
第三种是Tunnel是预览模式(地道模式),这和冒泡的相反,向下通报。
第三个参数是路由事件措置惩罚惩罚器类型,通报的参数是自界说类。
第四个参数是拥有这个路由事件的类型。
三、封装路由事件
CLR事件的封装器,差别于依赖属性的GetValue和SetValue,这里是操作Add和Remove两个函数来给路由事件分配事件措置惩罚惩罚器。
public event RoutedEventHandler ReportCurrentLocation
{
add { this.AddHandler(ReportCurrentLocationEvent, value); }
remove { this.RemoveHandler(ReportCurrentLocationEvent, value); }
}
四、创建可以激发路由事件的要领
重写OnClick要领触发设定路由事件,这是使用RaiseEvent()要领来触发
protected override void OnClick()
{
base.OnClick();
ReportCurrentLocationEventArgs args = new ReportCurrentLocationEventArgs(ReportCurrentLocationEvent, this);
args.ClickTime = DateTime.Now;
this.RaiseEvent(args);
}
完整代码如下图:
在界面XAML中,设计如下:
那么最后看一下事件措置惩罚惩罚器是怎样的
运行效果: