C# 拖曳距离阈值
我有一个带有两个WPF TreeView的程序,允许在两者之间拖放。问题是,在TreeView上打开/关闭项目可能会很烦人,因为在按住鼠标左键的同时只移动鼠标一个像素会触发拖放功能。是否有某种方法可以指定鼠标在被视为拖放之前应该移动多远?只需在代码中构建一个小缓冲区,以确定何时开始拖动C# 拖曳距离阈值,c#,wpf,drag-and-drop,treeview,C#,Wpf,Drag And Drop,Treeview,我有一个带有两个WPF TreeView的程序,允许在两者之间拖放。问题是,在TreeView上打开/关闭项目可能会很烦人,因为在按住鼠标左键的同时只移动鼠标一个像素会触发拖放功能。是否有某种方法可以指定鼠标在被视为拖放之前应该移动多远?只需在代码中构建一个小缓冲区,以确定何时开始拖动 放下鼠标 鼠标移动时-检查鼠标是否向下移动。。如果是,请检查其移动是否超过指定的缓冲区(3像素可能比较好) 如果有,开始拖动 这有一个系统参数。如果你有 Point down = {where mouse dow
这有一个系统参数。如果你有
Point down = {where mouse down event happened}
Point current = {position in the MouseMove eventargs}
如果出现以下情况,则鼠标移动了最小拖动距离:
Math.Abs(current.X - down.X) >= SystemParameters.MinimumHorizontalDragDistance ||
Math.Abs(current.Y - down.Y) >= SystemParameters.MinimumVerticalDragDistance
在这篇关于拖放实现的文章中,您必须处理2个鼠标事件,以便延迟拖动,直到鼠标移动一定距离。首先,为PreviewMouseDown添加一个处理程序,该处理程序存储相对于控件的初始鼠标位置。不要使用MouseDown事件,因为它是冒泡事件,可能在到达控件之前已由子控件处理
public class DraggableControl : UserControl
{
private Point? _initialMousePosition;
public DraggableControl()
{
PreviewMouseDown += OnPreviewMouseDown;
}
private void OnPreviewMouseDown(object sender, MouseButtonEventArgs e) {
_initialMousePosition = e.GetPosition(this);
}
此外,处理MouseMove以检查移动的距离并最终启动拖动操作:
...
public DraggableControl()
{
...
MouseMove += OnMouseMove;
}
...
private void OnMouseMove(object sender, MouseEventArgs e)
{
// Calculate distance between inital and updated mouse position
var movedDistance = (_initialMousePosition - e.GetPosition(this)).Length;
if (movedDistance > yourThreshold)
{
DragDrop.DoDragDrop(...);
}
}
}