WPF自學入門(四)WPF路由事件之自定義路由事件


       在上一篇博文中寫到了內置路由事件,其實除了內置的路由事件,我們也可以進行自定義路由事件。接下來我們一起來看一下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中,設計如下:

 

 

那么最后看一下事件處理器是怎樣的

 

運行效果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM