日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[Silverlight]奇技银巧系列-5 捕获路由事件

發(fā)布時間:2023/12/18 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Silverlight]奇技银巧系列-5 捕获路由事件 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Silverlight奇技銀巧系列:

所有該系列中的文章只為介紹一些Silverlight中或隱藏在Silverlight .NET framework鮮為人知的知識和技巧。這些文章并非教程,也是不是什么技術指導,您只需對文章介紹的內(nèi)容保有印象。這些知識和技巧也許會在不經(jīng)意間綻放銀色光芒。

Silverlight中事件的處理方式有時會令人費解。其實Silverlight中有兩種事件,它們分別是“直接事件”和“路由事件”。

所謂“直接事件”其實就是我們在winform,vb6,mfc等等中使用的事件模型,相信大家已經(jīng)很熟悉了,MediaElement的MediaEnded事件就是這種類型的事件。

而“路由事件”是從WPF發(fā)展到Silverlight中的。路由事件沿著可視化樹向上冒泡,它總是從嵌套中的最深層元素開始冒泡至嵌套最淺的元素。例如MouseLeftButtonUp事件先從鼠標直接點擊的元素上觸發(fā)然后才到其父元素(順著可視化樹繼續(xù)上行)。

從路由事件發(fā)生后,任意阻止冒泡的操作都可被路由事件沿途的控件捕獲并通知路由事件。在一些應用場景中,某些標準控件需要捕獲所需的路由事件,比如一個Button捕獲MouseLeftButtonUp路由事件。不過我們要如何才能得知事件是否已經(jīng)被捕獲呢?

答案是UIElement中的AddHandler方法

比如我們有如下XAML:

<StackPanel x:Name="LayoutRoot"Background="White"><Button Height="25"Width="100"Content="點我啊!"x:Name="clickButton"/><Button Height="25"Width="100"Content="AddHandler"x:Name="addButton" /> </StackPanel>

當我們點擊clickButton按鈕時LayoutRoot對應的MouseLeftButtonUp事件并不會觸發(fā),而當我們點擊clickButton按鈕外的其他區(qū)域時,LayoutRoot的MouseLeftButtonUp又被觸發(fā)了。

如果我們要讓clickButton捕獲LayoutRoot上的MouseLeftButtonUp事件,那就需要使用UIElement.AddHandler()方法。

該方法的簽名如下:

public void AddHandler(RoutedEvent routedEvent,

?Delegate handler,

bool handledEventsToo);

  • 一個確切的路由事件 routedEvent
  • 一個具有正確對應類型的委托 handler
  • 以及一個用來確定捕獲指定事件時是否發(fā)出通知的的布爾值handledEventsToo

于是在我們?yōu)閍ddButton的Click事件增加如下代碼

LayoutRoot.AddHandler(UIElement.MouseLeftButtonUpEvent,new MouseButtonEventHandler((o, args) => {MessageBox.Show("我是路由事件,我被觸發(fā)了,oh yeah!");}), true);

如此,我們在點擊clickButton的時候頁一樣可以捕獲到MouseLeftButtonUp事件了。

全部的后臺代碼如下:

public MainPage() {InitializeComponent();clickButton.Click += new RoutedEventHandler(clickButton_Click);addButton.Click += new RoutedEventHandler(addButton_Click); }void addButton_Click(object sender, RoutedEventArgs e) {LayoutRoot.AddHandler(UIElement.MouseLeftButtonUpEvent,new MouseButtonEventHandler((o, args) => {MessageBox.Show("我是路由事件,我被觸發(fā)了,oh yeah!");}), true);}void clickButton_Click(object sender, RoutedEventArgs e) {MessageBox.Show("我是按鈕,我被點了。");}

轉(zhuǎn)載于:https://www.cnblogs.com/024hi/archive/2010/01/29/1659221.html

總結

以上是生活随笔為你收集整理的[Silverlight]奇技银巧系列-5 捕获路由事件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。