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

时间:2014-09-13 18:26:46

标签: c# wpf xaml user-interface drag-and-drop

这与此问题here重复,但该答案没有足够的答案,有人可以帮我解决这个问题吗?

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

1 个答案:

答案 0 :(得分:0)

我知道这是迟到的并且在vb.net中,但它可能有用。我的例子是拖动TreeViewItems。首先必须捕获MouseLeftButtonDown事件被触发的位置。

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

然后在您的MouseMove事件中,检查您是否在触发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

我相信这澄清了post