拖放在开始拖动之前将鼠标移动一段设定的距离

本文关键字:一段 距离 移动 拖动 开始 鼠标 拖放 | 更新日期: 2023-09-27 18:21:42

这是这个问题的重复,但这个问题没有足够的答案,所以有人能帮我解决这个问题吗?

我有一个正在拖动的UserControl,但这个UserControl也是可单击的,所以有时当你单击时,你可能会将鼠标移动1个像素,它会认为它是拖放的。如何设置延迟或使鼠标在拖动之前必须移动,例如5个像素。

拖放在开始拖动之前将鼠标移动一段设定的距离

我知道这在vb.net中已经很晚了,但它可能很有用。我的示例是拖动TreeViewItems。您首先必须捕捉MouseLeftButtonDown事件触发的位置。

Private _downPoint As Point
Private Sub TreeViewItem_MouseLeftButtonDown(sender As Object, e As MouseEventArgs)
        _downPoint = e.GetPosition(Nothing)
End Sub

然后在你的鼠标移动事件中,在触发DoDragDrop之前,检查你是否移动了最短的距离。

Private Sub TreeViewItem_MouseMove(sender As Object, e As MouseEventArgs)
        _dragObject = sender.DataContext
        If _dragObject IsNot Nothing AndAlso e.LeftButton = MouseButtonState.Pressed AndAlso MovedMinimumDistance(e) Then
            DragDrop.DoDragDrop(tb, _dragObject, DragDropEffects.Move)
        End If
End Sub
Private Function MovedMinimumDistance(e As MouseEventArgs) As Boolean
        Return Math.Abs(e.GetPosition(Nothing).X - _downPoint.X) >= SystemParameters.MinimumHorizontalDragDistance AndAlso
        Math.Abs(e.GetPosition(Nothing).Y - _downPoint.Y) >= SystemParameters.MinimumVerticalDragDistance
End Function

我相信这澄清了这个帖子。