Silverlight的事件冒泡整理

简介: 转自 http://blog.csdn.net/dotfun/article/details/2887173 在Silverlight中,提供了事件冒泡,使得我们可以在父节点上接收和处理来自于子节点的事件,Silverlight中的事件采用 了冒泡路由策略。

转自 http://blog.csdn.net/dotfun/article/details/2887173

在Silverlight中,提供了事件冒泡,使得我们可以在父节点上接收和处理来自于子节点的事件,Silverlight中的事件采用 了冒泡路由策略。在鼠标事件中MouseLeftButtonDown 、MouseLeftButtonUp 、MouseMove三个事件都支持路由 事件,而MouseEnter、MouseLeave两个事件不支持。

 

 

  事件冒泡机制是指子对向沿着对象层次结构向上传递事件,比如在一个画布中包含一个矩形,如果为矩形和画布都定义了MouseMove事件,那么当在矩形上移动鼠标时,矩形会将MouseMove事件传递到他的父对象,那么父对象也会触发MouseMove事件。

下面举一个示例

在该图中有两个矩形,当鼠标在矩形上移动时,可以看到同时也触发了CanvasMouseMove事件。该示例的XAML代码如下所示。

<Canvas x:Name="parentCanvas"

        xmlns="http://schemas.microsoft.com/client/2007"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        Loaded="Page_Loaded"

        x:Class="bubbledeventDemo.Page;assembly=ClientBin/bubbledeventDemo.dll"

        Width="640"

        Height="480"

        MouseMove="onCanvasMouseMove"

        Background="White"

        >

 <!--定义矩形A,并指定移动事件-->

 <Rectangle

      x:Name="RectA"

      MouseMove="onRectMouseMove"

      Width="100" Height="100" Fill="PowderBlue" />

 <!--定义矩形B,并指定与矩形A相同的移动事件-->

 <Rectangle

    x:Name="RectB"

    MouseMove="onRectMouseMove"

    Width="100" Height="100" Fill="Gold"

    Canvas.Top="50" Canvas.Left="50" Opacity="0.5" />

 <!--定义当鼠标在矩形上面移动时的文本显示-->

 <TextBlock x:Name="statusTextBlock" Canvas.Top="180" />

 <!--由事件冒泡机制引发画布的MouseOver事件所显示的文本-->

 <TextBlock x:Name="canvasBlock" Canvas.Top="220" />

</Canvas>

鼠标事件己经直接在XAML代码中进行了指定,因此在这里只要直接编写事件处理代码即可,代码如下所示。

        //画布鼠标移动事件

        void onCanvasMouseMove(object sender, MouseEventArgs e)

        {

            string msg = "x:y = " + e.GetPosition(null).X.ToString() + ", " + e.GetPosition(null).Y.ToString();

            canvasBlock.Text = "Canvas: " + msg;

        }

        //鼠标移动事件

        void onRectMouseMove(object sender, MouseEventArgs e)

        {

            string msg = " x:y = " + e.GetPosition(null).X.ToString() + ", " + e.GetPosition(null).Y.ToString();

            statusTextBlock.Text =((Rectangle)sender).Name+ msg;

        }

代码调用GetPosition获取鼠标的位置,并赋给TextBlock进行显示。通过事件冒泡机制,当在矩形上移动鼠标时,同时也触发了画布的MouseMove事件。

目录
相关文章
|
JavaScript
简述事件委托
简述事件委托
|
JavaScript
jQuery入门第六章(滚动事件相关)
jQuery入门第六章(滚动事件相关)
76 0
|
JavaScript
jQuery入门第七章(事件)
jQuery入门第七章(事件)
92 0
|
C#
WPF一步步实现完全无边框自定义Window(附源码)
原文:WPF一步步实现完全无边框自定义Window(附源码)    在我们设计一个软件的时候,有很多时候我们需要按照美工的设计来重新设计整个版面,这当然包括主窗体,因为WPF为我们提供了强大的模板的特性,这就为我们自定义各种空间提供了可能性,这篇博客主要用来介绍如何自定义自己的Window,在介绍整个写作思路之前,我们来看看最终的效果。
1229 0
|
C#
WPF简单实用方法(持续更新)
原文:WPF简单实用方法(持续更新)   1:点击退出提示框 MessageBoxResult result = MessageBox.Show("你真的要退出吗?", "", MessageBoxButton.
524 0