【问题标题】:wpf - transparent MainWindow and issues with DragMove "Can only call DragMove when primary mouse button is down."wpf - 透明 MainWindow 和 DragMove 问题“只能在主鼠标按钮按下时调用 DragMove。”
【发布时间】:2010-10-06 20:51:47
【问题描述】:

我有一个使用透明窗口的 wpf 项目,我为我的对话框窗口和我的mainwindow 共享这个透明窗口样式。

在我关闭使用相同窗口样式的对话框窗口后,我的MainWindowDragMove() 事件出现错误。更奇怪的是,仅当我在MainWindow 上的Status Bar 中的标签上处理mouseleftbutton 事件时,才会发生此异常。如果我将标签换成按钮并将mouseleftbuttondown 替换为click 事件,则不会出现错误。

奇怪的是,弹出的对话窗口并没有实现dragmove,我也没有拖着我的mainwindow。在showdialog() 调用之后,我的代码执行返回到mainwindow 后,不知何故调用了dragmove

目前对我来说一个简单的解决方法是将我的标签换成按钮并连接点击事件。

但是,我更感兴趣的是了解导致此问题的原因以及为什么单击事件有效但鼠标却惨遭失败。

我的“StatusBar”只是一个带有标签和其他堆栈面板(包含更多标签)的stackpanel

以前有没有其他人解决过这个问题?我是否需要实现某种mouseclick 事件处理程序覆盖,以便我可以捕获并取消此异常的发生?

如果需要,可以提供重现代码。我在这里的dragmove 获得了足够多的点击量,所以我希望这对那里的人来说是一个简单的选择。

提前感谢您的帮助!

【问题讨论】:

    标签: transparency mainwindow mouseleftbuttondown


    【解决方案1】:

    我的大脑今天工作不正常。在这种情况下,我忘记了事件的路由。我只需要在按下鼠标按钮时触发的路由事件上设置 Handled 属性。不知何故,在发布线程之前,我在调试器中错过了这一点。

    【讨论】:

      【解决方案2】:

      使无边框窗口可移动的“正确”方法 --> https://stackoverflow.com/a/3275712/146032

      确保仅在由事件 MouseLeftButtonDown 触发时调用 DragMove,并且不要忘记使用 e.Handled=true 处理事件;

      【讨论】:

      • 这是一个很好的链接,但它与我的问题没有任何关系。我有一个失控的泡沫事件,它把一切都搞砸了。我弹出的对话框甚至没有实现dragmove,所以没有办法拖动它。
      【解决方案3】:

      如果您在消息框显示完成时收到此异常。放置 Dragmove(); 在里面 try 并在 catch 中清空。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 2018-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-27
        • 2012-06-24
        相关资源
        最近更新 更多