我需要一个控件来向下拖动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
                    });


有人有更好的吗?

最佳答案

我相信上面的编辑是最好的解决方案。

10-06 03:13