|
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; } (责任编辑:admin) |





骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价