在Silverlight中,提供了事件冒泡,使得我们可以在父节点上接收和处理来自于子节点的事件,Silverlight中的事件采用了冒泡路由策略。在鼠标事件中MouseleftbuttonDown 、MouseleftbuttonUp 、MouseMove三个事件都支持路由事件,而MouseEnter、MouseLeave两个事件不支持。
事件冒泡机制是指子对向沿着对象层次结构向上传递事件,比如在一个画布中包含一个矩形,如果为矩形和画布都定义了MouseMove事件,那么当在矩形上移动鼠标时,矩形会将MouseMove事件传递到他的父对象,那么父对象也会触发MouseMove事件。
下面举一个示例。
在该图中有两个矩形,当鼠标在矩形上移动时,可以看到同时也触发了Canvas的MouseMove事件。该示例的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事件。
@H_431_502@ 总结以上是内存溢出为你收集整理的Silverlight的事件冒泡整理全部内容,希望文章能够帮你解决Silverlight的事件冒泡整理所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)