C# WPF - 拖动并单击

标签 c# .net wpf xaml

我需要一个控件来为按下 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/

相关文章:

c# - 如何使用存储在 ObservableCollection 中的值向数据库添加新行?

WPF - 从 ItemsControl 的 ItemTemplate 中绑定(bind)到项目索引?

c# - 当我使用生产(基本应用服务)插槽时,为什么 Azure 应用服务无法可靠地读取我的连接字符串

c# - 尝试取消订阅该 EventHandler 的变量时取消订阅原始事件

c# - 扩展 EF DBContext

.net - 使用 .NET 实时读取文件中的更改

c# - 如何生成不容易受到 SQL 注入(inject)攻击的字符串

c# - 创建一个C#方法来生成自增Id

c# - 如何减少多个嵌套的 foreach block

c# - 显示消息框后如何停止功能