日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

WPF 路由事件初步

發布時間:2025/4/14 asp.net 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WPF 路由事件初步 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 簡單的事件模型

? ? winform中,事件模型包括一下幾個部分;

事件的擁有者:就是按鈕:button1
事件:就是button1.Click,在Form1.cs中
事件的處理器就是這個方法button1_Click
訂閱關系:也就是說事件和事件處理器如何建立聯系,
在 Form1.Designer.cs 中
? ? this.button1.Click += new System.EventHandler(this.button1_Click);

這里就建立了事件和事件處理器的聯系,當然一個事件我們也可以定義多個處理器相應;

2 路由事件模型?
? ? 傳統的簡單事件模型中,事件的響應者使用事件的處理器來做出響應,這樣就存在一個問題,用戶控件內部的事件就不能被外界訂閱,因為事件的宿主必須能夠直接訪問到事件的響應者。
? ? 路由事件的事件擁有者和事件的響應者之間則沒有直接的顯式訂閱關系,事件的擁有者則只負責激發事件,事件將有誰響應它并不知道,事件的響應者則有事件的監聽器,針對事件進行監聽,當有此類事件傳遞至此事件響應者就使用事件處理器來響應事件并決定此事件是否繼續傳遞。

? ? 一個示例,點擊按鈕以后事件就開始激發了,然后事件就會在控件樹上進行傳遞,事件的響應者安裝了監聽器,當監聽到這個事件進行響應,并決定這個事件是否繼續傳遞;
? ? 如果當事件在某個節點處理以后,不想讓它繼續傳遞,可以把它標記為“已處理”,就會停止路由,所有的路由事件都共享一個公共的事件數據基類 RoutedEventArgs。RoutedEventArgs 定義了一個采用布爾值的 Handled 屬性。把事件設為已處理只要把Handled屬性設為true即可;
?

<Window x:Class="test3.Window1"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="test3" Height="300" Width="300"><Grid x:Name="GridAAA"><Grid x:Name="GridBBB"><Grid x:Name="GridCCC"><Button Canvas.Left="60" Canvas.Top="50" Content="按鈕" Height="40" Name="ButtonA" Width="105" /></Grid></Grid></Grid> </Window> using System; using System.Collections.Generic; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media;namespace test3 {/// <summary>/// Interaction logic for Window1.xaml/// </summary>public partial class Window1 : Window{public Window1(){InitializeComponent();//為GridAAA添加Button.ClickEvent監聽this.GridAAA.AddHandler(Button.ClickEvent,new RoutedEventHandler(this.ButtonA_Click));//為GridBBB添加Button.ClickEvent監聽this.GridBBB.AddHandler(Button.ClickEvent, new RoutedEventHandler(this.ButtonA_Click));//為GridCCC添加Button.ClickEvent監聽this.GridCCC.AddHandler(Button.ClickEvent, new RoutedEventHandler(this.ButtonA_Click));}private void ButtonA_Click(object sender, RoutedEventArgs e){MessageBox.Show(((Grid)sender).Name);}} }

使用sharpdevelop;運行如下;Grid可以響應到按鈕的單擊;

?

總結

以上是生活随笔為你收集整理的WPF 路由事件初步的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。