在Silverlight中,提供了事件路由,使得我们可以在父节点上接收和处理来自于子节点的事件,Silverlight中的路由事件采用 了冒泡路由策略。在鼠标事件中MouseLeftButtonDown 、MouseLeftButtonUp 、MouseMove三个事件都支持路由事件,而MouseEnter、MouseLeave两个事件不支持。下面的XAML中我们为Canvas对象声 明了一个MouseLeftButtonDown事件:
< Canvas x : Name ="ParentCanvas" Background ="#46461F"
MouseLeftButtonDown ="ParentCanvas_MouseLeftButtonDown">
< Rectangle x : Name ="RecA" Fill ="Orange" Stroke ="White" StrokeThickness ="2"
Canvas.Top ="40" Canvas.Left ="60"
Width ="160" Height ="100"/>
< Rectangle x : Name ="RecB" Fill ="LightBlue" Stroke ="White" StrokeThickness ="2"
Canvas.Top ="40" Canvas.Left ="240"
Width ="160" Height ="100"/>
< TextBlock x : Name ="Status" Foreground ="White" Text ="Status"
Canvas.Left ="100" Canvas.Top ="200"/>
</ Canvas >
添加MouseLeftButtonDown事件处理程序,显示当前鼠标按下时的坐标,并显示源控件名称:
private void ParentCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
String msg = "x:y = " + e.GetPosition(sender as FrameworkElement ).ToString();
msg += " from " + (e.Source as FrameworkElement ).Name;
Status.Text = msg;
}
在事件数据中:
在silverlight2中没有e.source这个属性,可以用originalSource代替