成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

WPF路由事件各種方法總結

開發 開發工具
WPF路由事件包含的內容很多,其中有:氣泡事件;隧道事件以及直接事件。在這篇文章中我們將會了解到各種事件的相關應用。

WPF是一款由微軟公司自行研發的專門用來處理圖形界面顯示方面的開發工具。可以輕松的幫助開發人員實現與MAC相媲美的界面效果。在這里我們就先來了解一下WPF路由事件相關概念。#t#

我們創建一個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" MouseDown=
    "Window_MouseDown" > 
  5. < Grid MouseDown="Grid_MouseDown" 
    x:Name="grid"> 
  6. < Button Height="30" Width="100" 
    Content="點擊我" 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被點擊");  
  25. }  
  26. private void Grid_MouseDown
    (object sender, MouseButtonEventArgs e)  
  27. {  
  28. MessageBox.Show("Grid被點擊");  
  29. }  
  30. private void Button_MouseDown
    (object sender, MouseButtonEventArgs e)  
  31. {  
  32. MessageBox.Show("Button被點擊");  
  33. }  
  34. }  

 

調試運行,鼠標右鍵點擊按鈕,會依次彈出三個對話框。(注意一定是鼠標右鍵,否則引發不了事件)

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

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

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

 

  1. private void Button_MouseDown
    (object sender, MouseButton
    EventArgs e)  
  2. {  
  3. MessageBox.Show("Button被點擊");  
  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被點擊");  

 

到此大家應該對WPF路由事件有大概的認識了吧。

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

總結:

氣泡事件是WPF路由事件中最為常見,它表示事件從源元素擴散(傳播)到可視樹,直到它被處理或到達根元素。這樣您就可以針對源元素的上方層級對象處理事件。例如,您可向嵌入的 Grid 元素附加一個 Button.Click 處理程序,而不是直接將其附加到按鈕本身。氣泡事件有指示其操作的名稱(例如,MouseDown)。隧道事件采用另一種方式,從根元素開始,向下遍歷元素樹,直到被處理或到達事件的源元素。這樣上游元素就可以在事件到達源元素之前先行截取并進行處理。根據命名慣例,隧道事件帶有前綴 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="點擊我" 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被點擊");  
  25. }  
  26. private void Grid_PreviewMouseDown
    (object sender, MouseButtonEventArgs e)  
  27. {  
  28. MessageBox.Show("Grid被點擊");  
  29. }  
  30. private void Window_PreviewMouseDown
    (object sender, MouseButtonEventArgs e)  
  31. {  
  32. MessageBox.Show("Window被點擊");  
  33. }  
  34. }  

 

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

責任編輯:曹凱 來源: 博客園
相關推薦

2009-12-23 16:39:55

WPF命令

2009-12-25 10:46:36

WPF Page

2009-12-28 09:13:50

WPF容器控件

2009-12-28 15:08:12

WPF字體

2009-12-24 17:19:13

WPF觸發器

2009-12-23 15:03:52

WPF單元測試

2009-12-24 18:09:23

WPF開發環境

2009-12-21 14:31:39

Fedora core

2013-03-08 11:03:17

PowerShellVHDResizer虛擬磁盤

2024-08-29 08:04:14

2009-12-25 16:40:49

WPF優勢

2009-12-25 13:09:49

Linux Vi

2010-01-15 16:29:47

VB.NET對象存儲

2009-12-25 11:04:51

WPF Border

2009-12-25 13:41:33

2010-04-13 09:50:44

Oracle跟蹤

2009-12-17 17:05:03

Cisco路由器配置

2009-12-23 17:07:37

WPF性能

2009-12-25 17:02:33

WPF多媒體

2009-12-28 14:40:08

WPF屬性
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91在线视频播放 | 69xxx免费| 精品久久久网站 | 视频一区二区三区四区五区 | 国产欧美日韩精品一区二区三区 | 91高清在线观看 | 中文字幕免费中文 | www.se91 | 超碰精品在线 | 日韩在线国产 | 色吊丝2| 国产乱码精品一区二区三区五月婷 | 日日干干 | 中文字幕日韩一区 | 日韩国产在线观看 | 欧美精品综合在线 | aaaa一级毛片 | 99精品国产一区二区三区 | 日日干夜夜操 | av国产精品| 久久三区 | 中文字幕成人在线 | 久久www免费人成看片高清 | 成人午夜性成交 | 日韩欧美在线视频播放 | 夜夜爽99久久国产综合精品女不卡 | 91亚洲欧美 | 在线成人av| 中文字幕一区二区三区四区五区 | 91精品国产91久久久 | 天天爽天天操 | 国产成人精品午夜 | 国产区在线视频 | av片免费观看 | 午夜伦4480yy私人影院 | 亚洲va欧美va天堂v国产综合 | 国产婷婷色一区二区三区 | 99热精品在线观看 | 国产一级免费在线观看 | 五月婷婷丁香婷婷 | 国产成人精品久久二区二区91 |