我需要一个控件来向下拖动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();
}
});
});
编辑:好吧,这个hack工作了...
window.DragMove();
RaiseEvent(new MouseButtonEventArgs(e.MouseDevice, e.Timestamp, MouseButton.Left)
{
RoutedEvent = MouseLeftButtonUpEvent
});
有人有更好的吗?
最佳答案
我相信上面的编辑是最好的解决方案。