WPF检测鼠标移动?

时间:2010-01-20 11:11:07

标签: wpf vb.net mouse mouseevent

我想尝试制作我自己的基本Slider控件,以便我可以学习如何与鼠标进行交互......

到目前为止,我有这个:

vb.net:

Private Sub Rectangle_MouseMove(ByVal sender as Object, ByVal e as System.Windows.Input.MouseEventArgs)

If (e.LeftButton = MouseButtonState.Pressed) Then
    Dim p As Point = Mouse.GetPosition(Me)
    Rectangle.SetValue(FrameworkElement.MarginProperty, New Thickness(p.X - Rectangle.Width / 2, 0, 0, 0))
End If
End Sub

Private Sub Rectangle_MouseDown(ByVal sender as Object, ByVal e as System.Windows.Input.MouseButtonEventArgs)

End Sub

Private Sub Rectangle_MouseUp(ByVal sender as Object, ByVal e as System.Windows.Input.MouseButtonEventArgs)

End Sub

XAML:

<Rectangle x:Name="Rectangle" Fill="White" Stroke="Black" HorizontalAlignment="Left" Margin="0" VerticalAlignment="Top" Width="100" Height="75" MouseMove="Rectangle_MouseMove" MouseDown="Rectangle_MouseDown" MouseUp="Rectangle_MouseUp"/>

所以当鼠标在矩形上时这是有效的...但是如果我们看一下滑块的行为方式不同,你可以单击并按住鼠标并将其拖动到窗口外的任何位置,它仍然会更新它位置..

那怎么办?我的猜测是鼠标类,但我不明白如何使用它。

1 个答案:

答案 0 :(得分:3)

尝试使用Mouse.Capture方法。

您传递了对您的控件的引用,并且:

  

当元素捕获鼠标时,无论光标是否在其边界内,它都会接收鼠标输入。

     

如果未指定CaptureMode,则默认的CaptureMode为Element。

记下CaptureMode超载。如果您使用子元素等进行捕获,此枚举可能会有所帮助。