自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

幾種WPF事件策略詳細介紹

開發(fā) 開發(fā)工具
WPF事件策略供分為三種,分別是:Tunneling;Bubbling;Direct。其中Tunneling事件首先在根元素激發(fā)。Bubbling事件首先在源元素激發(fā)。Direct事件只在源元素激發(fā)。

在實用WPF時,一般情況下都會碰到有關(guān)WPF事件的相關(guān)應(yīng)用。那么首先我們需要了解的就是一些獲得支持的WPF事件策略。其中主要包括三種WPF事件策略:#t#

Tunneling:事件首先在根元素激發(fā),然后到達樹下的每個元素直到源元素(或者有處理函數(shù)處理這個事件終止了傳遞)。

Bubbling:事件首先在源元素激發(fā),然后向上直到根元素(或者有處理函數(shù)處理這個事件終止了傳遞。

Direct:事件只在源元素激發(fā)。這與普通的.NET事件一樣,除了參與事件觸發(fā)器。

在上面的WPF事件策略例子中,我們注冊的事件策略就是Bubbling。

傳遞事件的處理函數(shù)的參數(shù)與普通.NET事件一樣。第一個參數(shù)System.Object表示處理函數(shù)依附的元素。第二個的System.EventArgs派生類,提供了如下四個有用的屬性:

Source:邏輯樹中激發(fā)事件的原始元素。

OriginalSource:視覺樹中激發(fā)事件的原始元素。

Handled:布爾值,表示事件是否被處理。

RoutedEvent:實際的傳遞事件對象(比如Button.ClickEvent)。這個對于相同的處理函數(shù)處理多個傳遞事件時非常有用,可以用來區(qū)別傳遞事件。

Source和OriginalSource代表了邏輯樹和視覺樹對象。這有利于我們進行一些低級控制,但是對于有的事件,不需要區(qū)別它們,這兩個的值是相同的。

 

現(xiàn)在,我們看看WPF到底是如何處理Bubbling和Tunneling事件的。最后介紹了Attached事件。

在UIElement類,預(yù)定義了很多的傳遞事件,比如鍵盤、鼠標等等。其中大多數(shù)是Bubbling事件,其中很多的事件都還有一個對應(yīng)的Tunneling事件。所有的Tunneling事件都是Preview前綴命名,它們都在對應(yīng)的Bubbling事件之前激發(fā)。比如PreviewMouseMove這個Tunneling事件是在MouseMove這個Bubbling事件之前激發(fā)的。

Tunneling事件的好處就是可以有機會改變或者取消后面的Bubbling事件。WPF內(nèi)建的響應(yīng)事件只會對Bubbling事件進行響應(yīng),當然,前提了Bubbling和Tunneling同時定義。這種行為有什么好處呢?

看下面的一個WPF事件策略例子:比如,我們想實現(xiàn)一種特殊的編輯框,只允許輸入一些特定的字符。以前的實現(xiàn)方法在處理編輯框的KeyDown或者編輯框的WM_CHAR事件,然后判斷新輸入的字符是否滿足條件,如果不滿足,我們再把編輯框的值設(shè)置為原來的值。這種實現(xiàn)技術(shù)會有字符的一個回退過程。而在WPF中,實現(xiàn)方法不同,直接在PrevewKeyDown等Tunneling事件中處理,如果是不需要的字符,把事件設(shè)置為已經(jīng)處理過。

這樣這個事件就不會進入到后面的Bubbling事件KeyDown中,WPF也根本不會顯式這個字符。這種方法的效果將比之前的回退處理好很多。

雖然我們可以通過RoutedEventArgs參數(shù)的Handled屬性為True來終止事件的傳遞。但是,有時候我們需要某個事件始終被接受處理,這可以通過程序代碼實現(xiàn)。使用重載的AddHanlder方法。比如,我們給窗口添加一個鼠標右鍵的處理方法(其中MRBD_Handler是類的一個事件方法):
 

  1. public AboutDialog() {   
  2. InitializeComponent();   
  3. this.AddHandler(Window.
    MouseRightButtonDownEvent, 
    new MouseButtonEventHandler
    (MRBD_Handler), true);   

這樣,任何條件下,MRBD_Handler都可以接收到窗口的鼠標右鍵事件。即使鼠標右鍵是點擊在窗口中的某個子控件之上。

以上就是對WPF事件策略的一些相關(guān)介紹。

責(zé)任編輯:曹凱 來源: IT168
相關(guān)推薦

2009-12-24 10:09:33

WPF事件注冊

2009-12-24 16:11:07

WPF圖像處理

2011-07-03 18:44:45

網(wǎng)站優(yōu)化

2022-07-27 08:32:01

數(shù)據(jù)庫MySQL

2009-12-24 17:38:18

WPF事件觸發(fā)器

2023-11-02 08:10:13

框架Spring程序事件

2009-12-24 14:18:57

WPF類型轉(zhuǎn)換

2009-12-25 11:04:51

WPF Border

2009-12-23 18:06:25

WPF模板

2009-12-25 10:05:06

WPF資源

2009-12-29 13:29:28

WPF Depende

2011-07-14 13:50:09

ThreadLocal

2009-12-25 17:48:43

WPF資源路徑

2011-03-15 09:14:29

2009-12-29 10:32:24

WPF Listbox

2009-12-23 14:11:05

WPF名字空間

2009-12-28 11:14:29

WPF顯示文本

2009-12-24 15:04:12

WPF代碼解析異常

2009-12-25 16:36:45

WPF程序設(shè)計

2009-12-25 09:34:50

WPF顯示HTML
點贊
收藏

51CTO技術(shù)棧公眾號