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上的两个不同的位置来达到。
我不知道出了什么问题。有什么想法吗?
我一两天前刚刚回答了这个问题,但现在找不到问题,所以我再做一次。为此,可以使用 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
}
}