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

福田網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)建站于2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。
Tunneling:事件首先在根元素激發(fā),然后到達(dá)樹下的每個(gè)元素直到源元素(或者有處理函數(shù)處理這個(gè)事件終止了傳遞)。
Bubbling:事件首先在源元素激發(fā),然后向上直到根元素(或者有處理函數(shù)處理這個(gè)事件終止了傳遞。
Direct:事件只在源元素激發(fā)。這與普通的.NET事件一樣,除了參與事件觸發(fā)器。
在上面的WPF事件策略例子中,我們注冊(cè)的事件策略就是Bubbling。
傳遞事件的處理函數(shù)的參數(shù)與普通.NET事件一樣。第一個(gè)參數(shù)System.Object表示處理函數(shù)依附的元素。第二個(gè)的System.EventArgs派生類,提供了如下四個(gè)有用的屬性:
Source:邏輯樹中激發(fā)事件的原始元素。
OriginalSource:視覺樹中激發(fā)事件的原始元素。
Handled:布爾值,表示事件是否被處理。
RoutedEvent:實(shí)際的傳遞事件對(duì)象(比如Button.ClickEvent)。這個(gè)對(duì)于相同的處理函數(shù)處理多個(gè)傳遞事件時(shí)非常有用,可以用來區(qū)別傳遞事件。
Source和OriginalSource代表了邏輯樹和視覺樹對(duì)象。這有利于我們進(jìn)行一些低級(jí)控制,但是對(duì)于有的事件,不需要區(qū)別它們,這兩個(gè)的值是相同的。
現(xiàn)在,我們看看WPF到底是如何處理Bubbling和Tunneling事件的。最后介紹了Attached事件。
在UIElement類,預(yù)定義了很多的傳遞事件,比如鍵盤、鼠標(biāo)等等。其中大多數(shù)是Bubbling事件,其中很多的事件都還有一個(gè)對(duì)應(yīng)的Tunneling事件。所有的Tunneling事件都是Preview前綴命名,它們都在對(duì)應(yīng)的Bubbling事件之前激發(fā)。比如PreviewMouseMove這個(gè)Tunneling事件是在MouseMove這個(gè)Bubbling事件之前激發(fā)的。
Tunneling事件的好處就是可以有機(jī)會(huì)改變或者取消后面的Bubbling事件。WPF內(nèi)建的響應(yīng)事件只會(huì)對(duì)Bubbling事件進(jìn)行響應(yīng),當(dāng)然,前提了Bubbling和Tunneling同時(shí)定義。這種行為有什么好處呢?
看下面的一個(gè)WPF事件策略例子:比如,我們想實(shí)現(xiàn)一種特殊的編輯框,只允許輸入一些特定的字符。以前的實(shí)現(xiàn)方法在處理編輯框的KeyDown或者編輯框的WM_CHAR事件,然后判斷新輸入的字符是否滿足條件,如果不滿足,我們?cè)侔丫庉嬁虻闹翟O(shè)置為原來的值。這種實(shí)現(xiàn)技術(shù)會(huì)有字符的一個(gè)回退過程。而在WPF中,實(shí)現(xiàn)方法不同,直接在PrevewKeyDown等Tunneling事件中處理,如果是不需要的字符,把事件設(shè)置為已經(jīng)處理過。
這樣這個(gè)事件就不會(huì)進(jìn)入到后面的Bubbling事件KeyDown中,WPF也根本不會(huì)顯式這個(gè)字符。這種方法的效果將比之前的回退處理好很多。
雖然我們可以通過RoutedEventArgs參數(shù)的Handled屬性為True來終止事件的傳遞。但是,有時(shí)候我們需要某個(gè)事件始終被接受處理,這可以通過程序代碼實(shí)現(xiàn)。使用重載的AddHanlder方法。比如,我們給窗口添加一個(gè)鼠標(biāo)右鍵的處理方法(其中MRBD_Handler是類的一個(gè)事件方法):
- public AboutDialog() {
- InitializeComponent();
- this.AddHandler(Window.
MouseRightButtonDownEvent,
new MouseButtonEventHandler
(MRBD_Handler), true);- }
這樣,任何條件下,MRBD_Handler都可以接收到窗口的鼠標(biāo)右鍵事件。即使鼠標(biāo)右鍵是點(diǎn)擊在窗口中的某個(gè)子控件之上。
以上就是對(duì)WPF事件策略的一些相關(guān)介紹。
本文名稱:幾種WPF事件策略詳細(xì)介紹
網(wǎng)頁地址:http://fisionsoft.com.cn/article/dhecjjc.html


咨詢
建站咨詢
