日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
WPF路由事件各種方法總結(jié)

WPF是一款由微軟公司自行研發(fā)的專門用來處理圖形界面顯示方面的開發(fā)工具??梢暂p松的幫助開發(fā)人員實(shí)現(xiàn)與MAC相媲美的界面效果。在這里我們就先來了解一下WPF路由事件相關(guān)概念。#t#

“專業(yè)、務(wù)實(shí)、高效、創(chuàng)新、把客戶的事當(dāng)成自己的事”是我們每一個人一直以來堅(jiān)持追求的企業(yè)文化。 成都創(chuàng)新互聯(lián)公司是您可以信賴的網(wǎng)站建設(shè)服務(wù)商、專業(yè)的互聯(lián)網(wǎng)服務(wù)提供商! 專注于做網(wǎng)站、成都網(wǎng)站建設(shè)、軟件開發(fā)、設(shè)計(jì)服務(wù)業(yè)務(wù)。我們始終堅(jiān)持以客戶需求為導(dǎo)向,結(jié)合用戶體驗(yàn)與視覺傳達(dá),提供有針對性的項(xiàng)目解決方案,提供專業(yè)性的建議,創(chuàng)新互聯(lián)建站將不斷地超越自我,追逐市場,引領(lǐng)市場!

我們創(chuàng)建一個WPF應(yīng)用程序,代碼如下:

  1. < Window x:Class="Wpfceshi.
    Window1" 
  2. xmlns="http://schemas.microsoft.
    com/winfx/2006/xaml/presentation" 
  3. xmlns:x="http://schemas.
    microsoft.com/winfx/2006/xaml" 
  4. Title="Window1" Height="300" 
    Width="300" MouseDown=
    "Window_MouseDown" > 
  5. < Grid MouseDown="Grid_MouseDown" 
    x:Name="grid"> 
  6. < Button Height="30" Width="100" 
    Content="點(diǎn)擊我" MouseDown=
    "Button_MouseDown"/> 
  7. < /Grid> 
  8. < /Window> 
  9. using System.Windows;  
  10. using System.Windows.Input;  
  11. namespace Wpfceshi  
  12. {  
  13. /// < summary> 
  14. /// Window1.xaml 的交互邏輯  
  15. /// < /summary> 
  16. public partial class Window1 : Window  
  17. {  
  18. public Window1()  
  19. {  
  20. InitializeComponent();  
  21. }  
  22. private void Window_MouseDown
    (object sender, MouseButtonEventArgs e)  
  23. {  
  24. MessageBox.Show("Window被點(diǎn)擊");  
  25. }  
  26. private void Grid_MouseDown
    (object sender, MouseButtonEventArgs e)  
  27. {  
  28. MessageBox.Show("Grid被點(diǎn)擊");  
  29. }  
  30. private void Button_MouseDown
    (object sender, MouseButtonEventArgs e)  
  31. {  
  32. MessageBox.Show("Button被點(diǎn)擊");  
  33. }  
  34. }  

調(diào)試運(yùn)行,鼠標(biāo)右鍵點(diǎn)擊按鈕,會依次彈出三個對話框。(注意一定是鼠標(biāo)右鍵,否則引發(fā)不了事件)

這里大家也許就會問了,我點(diǎn)擊的是按鈕,為什么Grid和Window也會引發(fā)事件呢?其實(shí)這就是WPF路由事件的機(jī)制,引發(fā)的事件由源元素逐級傳到上層的元素,Button—>Grid—>Window,這樣就導(dǎo)致這幾個元素都接收到了事件。

那么如何讓Grid和Window不處理這個事件呢?

我們只需要在Button_MouseDown這個方法中加上e.Handled = true; 這樣就表示事件已經(jīng)被處理,其他元素不需要再處理這個事件了。

 
 
 
  1. private void Button_MouseDown
    (object sender, MouseButton
    EventArgs e)  
  2. {  
  3. MessageBox.Show("Button被點(diǎn)擊");  
  4. e.Handled = true;  

這時如果我們需要Grid也參與處理這個事件該怎么做呢?我們只需要給他AddHandler即可。

修改代碼如下

 
 
 
  1. public Window1()  
  2. {  
  3. InitializeComponent();  
  4. grid.AddHandler(Grid.
    MouseDownEvent, new 
    RoutedEventHandler
    (Grid_MouseDown1), true);  

再加上這個方法

 
 
 
  1. private void Grid_MouseDown1
    (object sender, RoutedEventArgs e)  
  2. {  
  3. MessageBox.Show("Grid被點(diǎn)擊");  

到此大家應(yīng)該對WPF路由事件有大概的認(rèn)識了吧。

上面我們看到的只是路由事件中的一種方式:氣泡。還有兩種:隧道、直接。

總結(jié):

氣泡事件是WPF路由事件中最為常見,它表示事件從源元素?cái)U(kuò)散(傳播)到可視樹,直到它被處理或到達(dá)根元素。這樣您就可以針對源元素的上方層級對象處理事件。例如,您可向嵌入的 Grid 元素附加一個 Button.Click 處理程序,而不是直接將其附加到按鈕本身。氣泡事件有指示其操作的名稱(例如,MouseDown)。隧道事件采用另一種方式,從根元素開始,向下遍歷元素樹,直到被處理或到達(dá)事件的源元素。這樣上游元素就可以在事件到達(dá)源元素之前先行截取并進(jìn)行處理。根據(jù)命名慣例,隧道事件帶有前綴 Preview(例如 PreviewMouseDown)。

直接事件類似 .NET Framework 中的正常事件。該事件***可能的處理程序是與其掛接的委托。

對于WPF路由事件中的隧道事件,大家可以寫個小程序測試一下

 
 
 
  1. < Window x:Class="Wpfceshi.
    Window1" 
  2. xmlns="http://schemas.
    microsoft.com/winfx/2006/xaml/
    presentation" 
  3. xmlns:x="http://schemas.
    microsoft.com/winfx/2006/xaml" 
  4. Title="Window1" Height="300" 
    Width="300" PreviewMouseDown=
    "Window_PreviewMouseDown" > 
  5. < Grid PreviewMouseDown=
    "Grid_PreviewMouseDown" 
    x:Name="grid"> 
  6. < Button Height="30" Width="100" 
    Content="點(diǎn)擊我" PreviewMouseDown=
    "Button_PreviewMouseDown"/> 
  7. < /Grid> 
  8. < /Window> 
  9. using System.Windows;  
  10. using System.Windows.Input;  
  11. namespace Wpfceshi  
  12. {  
  13. /// < summary> 
  14. /// Window1.xaml 的交互邏輯  
  15. /// < /summary> 
  16. public partial class Window1 : Window  
  17. {  
  18. public Window1()  
  19. {  
  20. InitializeComponent();  
  21. }  
  22. private void Button_PreviewMouseDown
    (object sender, MouseButtonEventArgs e)  
  23. {  
  24. MessageBox.Show("Button被點(diǎn)擊");  
  25. }  
  26. private void Grid_PreviewMouseDown
    (object sender, MouseButtonEventArgs e)  
  27. {  
  28. MessageBox.Show("Grid被點(diǎn)擊");  
  29. }  
  30. private void Window_PreviewMouseDown
    (object sender, MouseButtonEventArgs e)  
  31. {  
  32. MessageBox.Show("Window被點(diǎn)擊");  
  33. }  
  34. }  

可以看到,隧道事件的傳遞剛好與WPF路由事件中的氣泡事件相反。


新聞名稱:WPF路由事件各種方法總結(jié)
轉(zhuǎn)載源于:http://www.dlmjj.cn/article/dpgchgg.html