0

速いクリックがドラッグイベントになるという問題があります。

preventMouseButtonDown イベントを使用して開始位置を取得します。

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

previewMouseMove イベントは、実際の位置を提供します。2 つのポイントを比較して、ドラッグ イベントをトリガーします。

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

どのような minDx/y が設定されていても、GUI の 2 つの異なるポイントをすばやくクリックすることで到達します。

何がうまくいかなかったのかわかりません。何か案は?

4

1 に答える 1

1

1、2日前にこの問題に答えたばかりですが、今は質問が見つからないので、もう一度やり直します。この目的で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 に答える