【发布时间】:2023-03-21 12:44:01
【问题描述】:
我需要一个控件来为 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
});
谁有更好的?
【问题讨论】:
-
拖动窗口时需要单击/鼠标上键来做什么?
-
我们的设计在角落有一个图标,允许 DragMove,但如果你点击它,它会在窗口的一部分上切换面板的扩展。