0

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

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

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

previewMouseMove 事件传递实际位置。我比较这两点来触发我的拖动事件。

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

无论设置什么 minDx/y,都可以通过快速单击我的 gui 上的两个不同点来实现。

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

4

1 回答 1

1

我一两天前刚回答过这个问题,但现在找不到问题,所以我再做一次。为此,您可以使用SystemParameters.MinimumHorizontalDragDistance和属性:SystemParameters.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
    }
}
于 2013-10-17T11:41:32.850 回答