我需要一个控件来为按下 MouseLeftButton 的窗口调用 DragMove(),但单击时仍然可以运行。
如果调用 DragMove(),则不会触发 Click 和 MouseLeftButtonUp,因为在释放鼠标按钮之前,DragMove() 是一个阻塞调用。
有人知道解决方法吗?
我尝试过这种基于 Thread.Sleep 的 hack,它允许单击快于 100 毫秒时起作用,但它对用户来说不能可靠地工作:
ThreadPool.QueueUserWorkItem(_ =>
{
Thread.Sleep(100);
Dispatcher.BeginInvoke((Action)
delegate
{
if (Mouse.LeftButton == MouseButtonState.Pressed)
{
window.DragMove();
}
});
});
编辑:这个黑客有效......
window.DragMove();
RaiseEvent(new MouseButtonEventArgs(e.MouseDevice, e.Timestamp, MouseButton.Left)
{
RoutedEvent = MouseLeftButtonUpEvent
});
谁有更好的吗?
最佳答案
我相信我上面的编辑是最好的解决方案。
关于C# WPF - 拖动并单击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1917176/