【问题标题】:WPF: why CaptureMouse may fail?WPF:为什么 CaptureMouse 可能会失败?
【发布时间】:2012-07-01 16:32:45
【问题描述】:

我有一个非常复杂的视图,其中选项卡控件中有多个选项卡。在一个选项卡上有一个带有装饰层的控件。装饰层在 MouseLeftButtonDown 事件处理程序中调用 CaptureMouse 以捕获鼠标输入。一切正常。

但是,如果我以特定顺序切换视图上的选项卡,然后单击装饰层,则无法捕获鼠标输入:CaptureMouse() 返回 false。同时 Mouse.Captured 返回 null。承载装饰层的控件继续正常工作,甚至能够捕获鼠标。

无法提供任何代码,因为有许多自定义控件在起作用。在简化的布局中一切正常。

关于 CaptureMouse 可能失败的任何建议?

【问题讨论】:

    标签: wpf adornerlayer mousecapture


    【解决方案1】:

    如果IInputElementUIElementUIElement3D,则IsVisibleIsEnabled 必须是true

    如果IInputElementContentElement,则没有IsVisible,所以只有IsEnabled 必须是true。这当然是在您致电Mouse.Capture 时。此外,包含 IInputElement 的视觉对象的 PresentationSource 必须具有 IMouseInputProvider

    我认为这里的问题要么是另一个元素立即被捕获,要么是 IsVisible 在您调用 Capture 时是 false

    【讨论】:

      【解决方案2】:

      确保在 MouseLeftButtonUp 事件处理程序中调用 ReleaseMouseCapture() 否则您的原始装饰层将保留它。

      还要检查以确保您没有任何控制在链上更进一步也捕获鼠标(您可以在您的装饰层中将处理设置为 true 以防止这种情况发生)

      编辑:还要确保 IsEnabled 为真。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-11
        • 2021-10-10
        • 2013-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多