您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“WPF自定義路由事件的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“WPF自定義路由事件的示例分析”這篇文章吧。
定義只讀的靜態(tài)變量字段RouteEvent類來聲明一個變量,然后使用EventManager的RegisterRoutedEvent()方法向事件系統(tǒng)注冊路由事件,該方法的簽名如下:
public static RoutedEvent RegisterRoutedEvent(string name, RoutingStrategy routingStrategy, Type handlerType, Type ownerType);
該方法帶有四個參數(shù):
第一個參數(shù)name表示該路由事件在WPF事件系統(tǒng)中的名稱。
第二個參數(shù)routingStrategy是RoutingStrategy類型的枚舉值,標(biāo)明了路由事件的路由策略,共三種策略:
第一種Bubble是冒泡策略,這種模式是從觸發(fā)點向根節(jié)點傳遞,直到最外層。
第二種是Direct就是傳統(tǒng)的事件一樣的。
第三種是隧道策略,這和冒泡策略相反,向下傳遞。
第三個參數(shù)handlerType用來標(biāo)明事件處理函數(shù)的類型。
第四個個參數(shù)ownerType則用來標(biāo)明擁有該路由事件的類型。
EventManager的RegisterRoutedEvent()方法返回一個RoutedEvent類型的實例。一般情況下,該實例將由一個public static readonly字段所保存。
事件包裝器使用AddHandler方法來添加路由事件的調(diào)用程序,然后使用RemoveHandler來刪除已經(jīng)添加的調(diào)用程序。
演示創(chuàng)建自定義路由事件:
1、新建用戶控件,添加一個Button按鈕,添加按鈕的Click事件,XAML代碼如下:
<UserControl x:Class="CustomWpfRouteEvent.RouteEventControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300"> <Grid> <Button Height="30" Width="100" Content="調(diào)用路由事件" Click="Button_Click"></Button> </Grid> </UserControl>
2、在用戶控件的后臺代碼中創(chuàng)建自定義路由事件,C#代碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace CustomWpfRouteEvent { /// <summary> /// RouteEventControl.xaml 的交互邏輯 /// </summary> public partial class RouteEventControl : UserControl { public RouteEventControl() { InitializeComponent(); } //1、聲明并注冊路由事件,使用冒泡策略 public static readonly RoutedEvent MyClientEvent = EventManager.RegisterRoutedEvent("MyClick", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(RouteEventControl)); //2、通過.NET事件包裝路由事件 public event RoutedEventHandler MyClick { add { AddHandler(MyClientEvent, value); } remove { RemoveHandler(MyClientEvent, value); } } /// <summary> /// 3、使用按鈕的單擊事件激發(fā)路由事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Button_Click(object sender, RoutedEventArgs e) { RoutedEventArgs arg = new RoutedEventArgs(); arg.RoutedEvent = MyClientEvent; RaiseEvent(arg); } } }
3、在主界面中引入新創(chuàng)建的用戶控件,使用自定義的路由事件MyClick,并為MyClick事件編寫調(diào)用的方法,XAML代碼如下:
<Window x:Class="CustomWpfRouteEvent.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:u="clr-namespace:CustomWpfRouteEvent" Title="演示自定義路由事件" Height="350" Width="525" WindowStartupLocation="CenterScreen"> <Grid> <u:RouteEventControl MyClick="RouteEventControl_MyClick"></u:RouteEventControl> </Grid> </Window>
4、RouteEventControl_MyClick方法的后臺代碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace CustomWpfRouteEvent { /// <summary> /// MainWindow.xaml 的交互邏輯 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void RouteEventControl_MyClick(object sender, RoutedEventArgs e) { MessageBox.Show("Hello:" + e.Source.ToString()); } } }
5、運行程序,單擊Button按鈕,效果如下所示:
以上是“WPF自定義路由事件的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。