SilverLight中鼠标的基本操作
1. 事件路由
在Silverlight中,提供了事件路由,使得我们可以在父节点上接收和处理来自于子节点的事件,
Silverlight中的路由事件采用了冒泡路由策略。
在鼠标事件中MouseLeftButtonDown 、MouseLeftButtonUp 、MouseMove三个事件都支持路由事件,而MouseEnter、MouseLeave两个事件不支持
<Canvas x:Name="ParentCanvas" Background="#404610" Grid.Row="0" Grid.Column="1">
<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>
ParentCanvas.MouseLeftButtonDown += new MouseButtonEventHandler(ParentCanvas_MouseLeftButtonDown);
private void ParentCanvas_MouseLeftButtonDown(object sender,MouseButtonEventArgs e)
{
String msg = "x:y = " + e.GetPosition(sender as FrameworkElement).ToString();
msg += " from " + (e.OriginalSource as FrameworkElement).Name;
Status.Text = msg;
}
2.拖动
好像TextBlock 和 Rectangle 等图形类的就可以拖,可是如果是Button等控件类的就拖不动。还不知道为什么。
<Canvas Background="#46401F" Grid.Row="1" Grid.Column="0">
<Rectangle
MouseLeftButtonDown="OnMouseDown"
MouseMove="OnMouseMove"
MouseLeftButtonUp="onmouseup"
Fill="Orange" stroke="White" strokeThickness="2"
Canvas.Top="40" Canvas.Left="60"
Width="160" Height="100"/>
<TextBlock Text="TextBlock" Width="50" Height="40" Canvas.Top="10" Canvas.Left="60" Foreground="Blue"
MouseLeftButtonDown="OnMouseDown"
MouseMove="OnMouseMove"
MouseLeftButtonUp="onmouseup"
></TextBlock>
<Button x:Name="btnWelcome"
MouseLeftButtonDown="OnMouseDown"
MouseMove="OnMouseMove"
MouseLeftButtonUp="onmouseup"
Canvas.Left="50" Canvas.Top="150" Background="Red"
FontSize="18"
Width="160" Height="80">
</Button>
</Canvas>
bool trackingMouseMove = false;
Point mousePosition;
protected void OnMouseDown(object sender,MouseButtonEventArgs e)
{
FrameworkElement element = sender as FrameworkElement;
mousePosition = e.GetPosition(null);
trackingMouseMove = true;
if (null != element)
{
element.CaptureMouse();
element.Cursor = Cursors.Hand;
}
}
protected void OnMouseMove(object sender,MouseEventArgs e)
{
if (trackingMouseMove)
{
FrameworkElement element = sender as FrameworkElement;
double deltaV = e.GetPosition(null).Y - mousePosition.Y;
double deltaH = e.GetPosition(null).X - mousePosition.X;
double newTop = deltaV + (double)element.GetValue(Canvas.TopProperty);
double newLeft = deltaH + (double)element.GetValue(Canvas.LeftProperty);
element.SetValue(Canvas.TopProperty,newTop);
element.SetValue(Canvas.LeftProperty,newLeft);
mousePosition = e.GetPosition(null);
}
}
protected void onmouseup(object sender,MouseButtonEventArgs e)
{
FrameworkElement element = sender as FrameworkElement;
trackingMouseMove = false;
element.ReleaseMouseCapture();
mousePosition.X = mousePosition.Y = 0;
element.Cursor = null;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。