WPF學習之路 路由事件

2022-08-05 03:09:10 字數 1800 閱讀 1918

前景簡介

博主本人從事sdk開發,主要語言c++,由於客戶需求,需要給予自己的sdk,開發一套應用,採用wpf,本人wpf小白。

所以從頭開始學習wpf,主要看過了《深入遷出wpf》,就開始了程式的開發,由於對於mvvm理解不深,程式框架寫的非常亂,

雖然應用已經發布,但是後續擴充套件難度較大

最近研究多螢幕顯示,發現對於wpf學習,依然停留在表面,所以決定深入學習wpf。

言歸正傳

博主決定首先跟隨 

的章節一節一節的將基礎知識夯實。然後計畫花費一定時間看一下《wpf程式設計寶典》,這本書真心太厚。。。。

由於博主對於xmal和依賴項屬性基本已經了解,所以這裡直接跳過。

路由事件主要包含以下三種事件

在程式開發時,通常我們需要為每個事件繫結事件處理程式,但是在某些特定的場景,多個事件可以使用同一套處理程式,這時路由事件的強大就體現出來了,我們可以在一組事件的父元素統一處理這類事件。

}我們可以通過gettype方法獲取當前呼叫者的型別,執行會發現,事件的源型別是button型別,父型別是grid,也就是button的單擊事件路由到了grid然後由grid的單擊事件監聽到。

盜取一張說的比較詳細的,從這張上可以看出節點之間的包含關係。

引用msdn的解釋圖,在來看下路由事件

事件的處理順序如下所示:

針對根元素處理 previewmousedown(隧道)。

針對中間元素 1 處理 previewmousedown(隧道)。

針對源元素 2 處理 previewmousedown(隧道)。

針對源元素 2 處理 mousedown(冒泡)。

針對中間元素 1 處理 mousedown(冒泡)。

針對根元素處理 mousedown(冒泡)。

我們來驗證下,我們以此處理所有的preview事件,看看是不是按照上面介紹的方式去處理的。

我們分別在grid和button增加滑鼠左鍵按下預處理事件(隧道事件,由父事件向下傳播),可測可以看出首先執行的是grid的事件,然後才會去執行button的事件。

如果父類事件增加對路由事件的返回,button就不會監聽到滑鼠左鍵按下事件

private void grid_previewmouseleftbuttondown_1(object sender, mousebuttoneventargs e)

這時button就不會監聽到滑鼠左鍵按下的時間,因為隧道事件返回了。

WPF基礎之路由事件(一)

路由 routing 是指分組從源到目的地時,決定端到端路徑的網路範圍的程序 什麼是路由事件 功能定義 路由事件是一種可以針對元素樹中的多個偵聽器 而不是僅針對引發該事件的物件 呼叫處理程式的事件。實現定義 路由事件是乙個clr事件,可以由routedevent類的例項提供支援並由windows p...

WPF基礎之路由事件 二

若要使用xaml為某個事件新增處理程式,請將該事件的名稱宣告為用作事件偵聽器的元素上的屬性。該屬性的值是所實現的處理程式方法的名稱,該檔案必須存在於 隱藏檔案的分部類中。button用來新增標準clr事件處理程式的xaml語法與用來新增路由事件處理程式的語法相同,因為您實際上是在向下面具有路由事件實...

學習WPF路由事件

建議大家使用工具 snoop,可以到blois.us snoop 先來了解下什麼是wpf裡的路由事件 我們建立乙個wpf應用程式,如下 using system.windows using system.windows.input namespace wpfceshi private void wi...