WPF 快速单击事件成为拖动事件

本文关键字:事件 拖动 单击 WPF | 更新日期: 2023-09-27 18:35:49

我有一个问题,快速点击变成了一个拖动事件。

我使用 preventMouseButtonDown 事件来获取起始位置:

private void previewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    _pointStartDrag = e.GetPosition(null);
}

previewMouseMove-event 提供实际位置。我比较这两点来触发我的拖动事件。

Vector d = _pointStartDrag - e.GetPosition(null);
if( |d.x| > minDx || |d.y| > minDy)
    //here is my drag-event

无论设置什么minDx/y,都可以通过快速单击我的GUI上的两个不同的位置来达到。

我不知道出了什么问题。有什么想法吗?

WPF 快速单击事件成为拖动事件

我一两天前刚刚回答了这个问题,但现在找不到问题,所以我再做一次。为此,可以使用 SystemParameters.MinimumHorizontalDragDistanceSystemParameters.MinimumVerticalDragDistance 属性:

private bool IsConfirmedDrag(Point point)
{
    bool horizontalMovement = Math.Abs(point.X - dragStartPosition.X) > 
        SystemParameters.MinimumHorizontalDragDistance;
    bool verticalMovement = Math.Abs(point.Y - dragStartPosition.Y) > 
        SystemParameters.MinimumVerticalDragDistance;
    return (horizontalMovement | verticalMovement);
}

它是这样用的:

private void DragSourcePreviewMouseMove(object sender, MouseEventArgs e)
{
    if (isMouseDown && IsConfirmedDrag(e.GetPosition(sender as ListBox)))
    {
        isMouseDown = false;
        ...
        // Start Drag operation
    }
}