【问题标题】:WPF Mouse.Capture causes window to freezeWPF Mouse.Capture 导致窗口冻结
【发布时间】:2017-12-01 01:13:17
【问题描述】:

我有一个 WPF 图表,我正在图表上创建一个拖动滚动滑动窗口。我基本上是按照 MouseDown-MouseMove-MouseUp 序列来跟踪滑动窗口的移动。我想管理 MouseDown 后 MouseMove/MouseUp 发生在图表区域之外的情况。为此,我在 MouseDown 上执行 Mouse.Capture(Chart) 并在 MouseUp 上释放捕获。但是每当 MouseDown 发生时,我的窗口就会挂起。我究竟做错了什么?

【问题讨论】:

  • 您可能编写了在 MouseDown 事件上进入循环的代码。无法判断您是否这样做,您没有发布任何代码。

标签: c# wpf


【解决方案1】:

试试这个:

Mouse.Capture (Chart, CaptureMode.SubTree)

【讨论】:

    【解决方案2】:

    也许您不是从 Window 或 UserControl 或其他 UIElement 处理鼠标事件,而是在不从 UIElement 继承的特定元素上处理鼠标事件? 你需要使用

    <UserControl x:Class="...
              MouseDown="HandleMouseDown" 
              .../>
    

    而不是

    <ListBox x:Name="...
                MouseDown="HandleMouseDown"
               .../>
    

    实际上,窗口是完全挂起还是对鼠标点击没有反应(机器人在键盘上做)?

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题。对我来说,问题是鼠标捕获由于某种原因立即调用了 MouseMove 事件,而我遇到了崩溃,因为我的鼠标移动事件期望在 MouseDown 中实例化一个 Rectangle。当然它仍然是空的。

      所以堆栈看起来像这样:

      MouseDown 
        MouseCapture 
          MouseMove
      then returns to where it left off in MouseDown
      

      【讨论】:

        猜你喜欢
        • 2020-09-13
        • 1970-01-01
        • 1970-01-01
        • 2019-12-16
        • 2019-05-28
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 2017-08-18
        相关资源
        最近更新 更多