Win10系列 UWP介面布局基礎8

2021-09-11 03:34:38 字數 3160 閱讀 7595

路由事件

xaml不僅繼承了傳統的事件處理方式,還引入了乙個增強型事件處理機制:路由事件(routedevent)。路由事件和傳統事件的不同是:路由事件允許乙個物件觸發事件後,可以同時擁有多個事件接收者。也就是說,路由事件可以針對多個物件(而不是僅針對觸發該事件的物件)呼叫事件處理程式。

在xaml檔案中,所有的元素物件構成一種巢狀結構,當應用程式執行時,也將按照層次結構順序由外到內對這些元素物件進行初始化,最終生成乙個物件樹,在windows應用商店的空白應用程式專案中,最終生成乙個以page元素為根的物件樹。基於物件樹的概念,xaml中路由事件處理方式可分為以下三種:

(1)冒泡路由方式。乙個物件觸發事件後,事件將沿著物件樹由下至上,由子元素物件到父元素物件傳播擴散,直到到達物件樹的根元素,或者該事件的handled屬性取值為true時,完成處理。在傳播擴散中,所有涉及的元素物件都會呼叫相應的事件處理程式。

(2)隧道路由方式。該類事件處理方式和冒泡方式相反,在物件觸發事件後,事件將從根物件傳播擴散到觸發該事件的物件,或者該事件的handled屬性取值為 true時,完成處理。

(3)直接路由方式。在這種處理方式中事件不進行向上或向下傳播擴散,僅作用於觸發該事件的當前物件上。

控制項" fontweight="bold" margin="5"/>

控制項" fontweight="bold" foreground="white" margin="5"/>

控制項" fontweight="bold" margin="5"/>

事件冒泡順序是:

" fontweight="bold" margin="5"/>

在上面的**中,新增了乙個grid控制項,設定背景色為黑色,並為pointerpressed事件註冊了處理方法grid_pointerpressed,同時在該控制項內部新增了乙個textblock控制項和乙個canvas控制項, 其中textblock控制項的文字內容為"grid控制項",canvas控制項的背景色為灰色,並為canvas控制項的pointerpressed事件註冊了處理方法canvas_pointerpressed。接著在canvas控制項內又新增了乙個textblock控制項和乙個stackpanel控制項,textblock控制項的文字內容為"canvas控制項",文字顏色為白色,stackpanel控制項的背景色為黑色,並為pointerpressed事件註冊了處理方法stackpanel_pointerpressed。最後在stackpanel控制項中,先新增了兩個textblock文字塊,其中乙個文字塊的文字內容為"stackpanel控制項",另乙個文字塊的文字內容為"事件冒泡順序是:",隨後又定義了乙個文字框,將其命名為showeventorder,並分別設定文字框的邊框顏色和字型顏色等。

布局好前台介面後,開啟mainpage.xaml.cs檔案,分別為grid控制項、canvas控制項和stackpanel控制項的pointerpressed事件定義相應的事件處理方法。

grid控制項的pointerpressed事件處理方法grid_pointerpressed的**片段如下所示:

private void grid_pointerpressed(object sender, pointerroutedeventargs e)

在上面的**中,將"grid; "字串追加到showeventorder文字框中,並通過設定引數e的handled屬性值為true來停止事件傳播。

canvas控制項的pointerpressed事件處理方法canvas_pointerpressed的**片段如下所示:

private void canvas_pointerpressed(object sender, pointerroutedeventargs e)

stackpanel控制項的pointerpressed事件處理方法stackpanel_pointerpressed的**片段如下所示:

private void stackpanel_pointerpressed(object sender, pointerroutedeventargs e)

啟動除錯,未單擊任何控制項區域之前的效果如圖3-13所示。

圖3-13 介面初始狀態

當單擊grid控制項區域時,grid物件會觸發pointerpressed事件,並且呼叫相應的事件處理方法grid_pointerpressed,完成將字串"grid;"追加到showeventorder文字框中。這時,事件的handled屬性值已經為true,所以事件停止擴散,最終產生的結果如圖3-14所示。

圖3-14 單擊grid控制項區域產生的結果

當單擊canvas控制項區域時,canvas物件會觸發pointerpressed事件,並且呼叫相應的事件處理方法canvas_pointerpressed,完成將字串"canvas- "追加到showeventorder文字框中。由於canvas物件還有乙個父物件grid,因此事件會繼續向上傳播,呼叫grid的事件處理方法grid_pointerpressed。事件傳到grid物件後就停止傳播,最終產生的結果如圖3-15所示。

圖3-15 單擊canvas控制項區域產生的結果

當單擊stackpanel控制項區域時,stackpanel物件會觸發pointerpressed事件,並且呼叫相應的處理方法stackpanel_pointerpressed,完成將字串"stackpanel - "追加到showeventorder文字框中。由於stackpanel物件上面還有父物件,因此事件會繼續向上傳播,依次呼叫canvas物件的事件處理方法canvas_pointerpressed和grid物件的事件處理方法grid_pointerpressed。待事件傳到grid物件後,將停止傳播,最終產生的結果如圖3-16所示。

圖3-16 單擊stackpanel控制項區域產生的結果

posted on

2017-03-30 13:28

...)

編輯收藏

Win10系列 UWP介面布局高階1

全新的windows 10 作業系統支援多種檢視模式,使用者可以根據需要選擇不同的檢視模式顯示應用。當使用者同時瀏覽或操作多個應用程式時,可以將應用檢視調整為輔屏檢視或填充檢視,這樣在乙個螢幕中可以同時對兩個應用進行操作,並且兩個應用之間不會相互受到影響。除此之外當使用者在使用平板電腦閱讀電子書時,...

Win10系列 UWP介面布局基礎5

2 編寫後台 訪問資源 xmlns xmlns x xmlns d xmlns mc mc ignorable d 執行後啟用樣式 fontsize 20 margin 169,345,0,378 接下來,在mainpage構造方法中引用鍵為 buttonstyle 的樣式資源為samplebutt...

Win10系列 UWP介面布局高階1

全新的windows 10 作業系統支援多種檢視模式,使用者可以根據需要選擇不同的檢視模式顯示應用。當使用者同時瀏覽或操作多個應用程式時,可以將應用檢視調整為輔屏檢視或填充檢視,這樣在乙個螢幕中可以同時對兩個應用進行操作,並且兩個應用之間不會相互受到影響。除此之外當使用者在使用平板電腦閱讀電子書時,...