WPF系列学习之三(路由事件)
?路由事件實際上以一上 列三種方式出現。
??? 1.與普通的.net事件類似的直接路由事件。它們起源于一個元素,并且不傳遞給其他元素。例如:MouseEnter事件。
??? 2.在包含層次中向上傳遞的冒泡路由事件。例如:MouseDown事件就是一個冒泡路由事件。它首先由被單擊的元素引發,接下來被該元素的父元素引發,然后被父元素的父元素引發,以此類推,直到WPF到達元素樹的頂部為之。
???? 3.在包含層次的向下傳遞的隧道路由事件。道道路由事件在事件到達恰當的控件之前為預覽事件提供了機會。例如:通過PreviewKeyDown事件可以裁獲是否按下了一個鍵,
附加路由事件:就是當一個控件沒有定義某個路由事件時可以為其動態的添加事件如下:
? <Window x:Class="StudyWPF.Hanlder"
??????? xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
??????? xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
??????? Title="Hanlder" Height="600" Width="400">
??? <StackPanel ButtonBase.Click="btn_Click">
??????? <Button Name="btntest1">btntest1</Button>
??????? <Button Name="btntest2">btntest1</Button>
??????? <Button Name="btntest3">btntest1</Button>
??????? <Button Name="btntest4">btntest1</Button>
??? </StackPanel>
后臺中寫:? private void btn_Click(object send, RoutedEventArgs e)
??????? {
??????????? MessageBox.Show("asdfasd");
??????? }
</Window>
StackPanel沒有定義Click事件所以可以在后臺程序窗口初始化時為其附加路由事件如下:
也可以向上面代碼一樣添加Button.Click="后臺定義的Click事件"
pnlButtons.AddHandler(Button.Click,new RoutedEventHandler(自己定義的Click事件));
而在btn_click事件中可以通過查看
?? if(send=="btnname1"){做它的事;}
else if (sender=="btnname2"){做它的事;}
else .....
?也可以在按鍵中添加tag屬性="123"
而在后臺的click事件中添加如下判斷:
if(sender.Tag=="asdas") {做它自己的事;}
????????????????????? 隧道路由事件:
? ?
?? 隧道路由事件的工作方式和冒泡路由事件相同,但方向相反。如PreviewMouseUP事件,首先在窗口中被引發,然后其中的Grid控件,接下來在StackPanel面板中被引發,依此類推,直到實際源頭,它們都以Preview開頭且它們都以冒泡路由事件之前被觸發,
?
??
轉載于:https://www.cnblogs.com/haofaner/p/3821682.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的WPF系列学习之三(路由事件)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 培育钻石是什么 其实和真钻石没区别
- 下一篇: 赞!超炫的页面切换动画效果【附源码下载】