WPF基礎之路由事件 二

2021-09-10 07:16:53 字數 1329 閱讀 1654

若要使用xaml為某個事件新增處理程式,請將該事件的名稱宣告為用作事件偵聽器的元素上的屬性。該屬性的值是所實現的處理程式方法的名稱,該檔案必須存在於**隱藏檔案的分部類中。

button
用來新增標準clr事件處理程式的xaml語法與用來新增路由事件處理程式的語法相同,因為您實際上是在向下面具有路由事件實現的clr事件包裝中新增處理程式。

冒泡:針對事件源呼叫事件處理程式。路由事件隨後會路由到後續的父元素,直到到達元素樹的根。大多數路由事件都使用冒泡路由策略。冒泡路由事件通常用來報告來自不同控制項或其他ui元素的輸入或狀態變化。

直接:只有源元素本身才有機會呼叫處理程式以進行響應。這與windows窗體用於事件的「路由」相似。但是,與標準clr事件不同的是,直接路由事件支援類處理而且可以由eventsetter和eventtrigger使用。

隧道:最初將在元素樹的根處呼叫事件處理程式。隨後,路由事件將朝著路由事件的源節點元素(即引發路由事件的元素)方向,沿路由線路傳播到後續的子元素。在合成控制項的過程中通常會使用或處理隧道路由的事件,這樣,就可以有意地禁止顯示復合部件中的事件,或者將其替換為特定於整個控制項的事件。在wpf中提供的輸入事件通常是以隧道/冒泡對實現的。隧道事件有時又稱作preview事件,這是由隧道/冒泡對所使用的命名約定決定的。

作為應用程式開發人員,您不需要始終了解或關注正在處理的事件是否作為路由事件實現。路由事件具有特殊的行為,但是,如果您在引發該行為的元素上處理事件,則該行為通常會不可見。

如果您使用以下任一建議方案,l路由事件的功能將得到充分發揮:在公用根處定義公用處理程式、合成自己的控制項或定義您自己的自定義控制項類。

路由事件偵聽器和路由事件源不必在其層次結構中共享公用事件。任何uielement或contentelement可以是任一路由事件的事件偵聽器。因此,您可以使用在整個工作api集內可用的全套路由事件作為概念「介面」,應用程式中的不同元素憑藉這個介面來交換事件資訊。路有事件的這個「介面」概念特別適用於輸入事件。

路由事件還可以用來通過元素樹進行通訊,因為事件的事件資料會永存到路由中的每個元素中。乙個元素可以更改事件中的某項內容,該更改將對於路由中的下乙個元素可用。

之所以將任何給定的wpf事件作為路由事件的實現(而不是作為標準clr事件實現),除了路由方面的原因,還有兩個其他原因。如果您要實現自己的事件,則可能也需要考慮這兩個因素:

某些wpf樣式和模板功能(eg.eventsetter、eventtrigger)要求所引用的事件是路由事件。

路由事件支援類處理機制,類可以憑藉該機制來指定靜態方法,這些靜態方法能夠在任何已註冊的例項程式訪問路由事件之前,處理這些路由事件。這在控制項設計中非常有用,因為您的類可以強制執行事件驅動的行為,以防它們在處理例項上的事件時被意外禁止。

WPF基礎之路由事件(一)

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

WPF學習之路 路由事件

前景簡介 博主本人從事sdk開發,主要語言c 由於客戶需求,需要給予自己的sdk,開發一套應用,採用wpf,本人wpf小白。所以從頭開始學習wpf,主要看過了 深入遷出wpf 就開始了程式的開發,由於對於mvvm理解不深,程式框架寫的非常亂,雖然應用已經發布,但是後續擴充套件難度較大 最近研究多螢幕...

WPF路由事件

c 高階程式設計第八版閱讀筆記 sender 事件的傳送者 其呼叫的事件處理器 source事件源 激發 raise 的事件 不使用路由事件的話 sender跟source是同一物件 originalsource 也是事件源 與source不同的地方在於他是原始事件源,真正的激發事件的源頭 事件的s...