在上一篇博文中寫到了內置路由事件,其實除了內置的路由事件,我們也可以進行自定義路由事件。接下來我們一起來看一下WPF中的自定義路由事件怎麼進行創建吧。 創建自定義路由事件分為3個步驟: 1、聲明並註冊路由事件。 2、利用CLR事件包裝路由事件(封裝路由事件)。 3、創建可以激發路由事件的方法。 現在 ...
在上一篇博文中寫到了內置路由事件,其實除了內置的路由事件,我們也可以進行自定義路由事件。接下來我們一起來看一下WPF中的自定義路由事件怎麼進行創建吧。
現在我們一起創建一個能夠報告當前時間和當前位置信息的路由事件,一起去控制項裡面游覽一番。現在開始創建自定義路由事件
創建繼承RoutedEventArgs類的派生類ReportCurrentLocationEventArgs用來攜帶時間和位置消息,ClickTime屬性是用來存儲時間,CurrentLocation屬性是用來存放位置
我們用EventManager.RegisterRoutedEvent方法來註冊的參數有4個。代碼如下:
public static readonly RoutedEvent ReportCurrentLocationEvent =EventManager.RegisterRoutedEvent
("ReportCurrentLocation", RoutingStrategy.Bubble, typeof(EventHandler<ReportCurrentLocationEventArgs
>), typeof(ButtonReportCurrentLocation));
第一種是Bubble是冒泡模式,這種模式是從觸發點向上傳遞,知道最外層。
第三種是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()
ReportCurrentLocationEventArgs args = new ReportCurrentLocationEventArgs(ReportCurrentLocationEvent, this);
args.ClickTime = DateTime.Now;