WPF:为什么CaptureMouse会失败?

时间:2012-06-30 11:30:05

标签: wpf adornerlayer mousecapture

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

但是如果我按特定顺序切换视图上的标签,然后单击adorner图层则无法捕获鼠标输入:CaptureMouse()返回false。同时Mouse.Captured返回null。托管装配层的控件可以继续正常工作,甚至可以捕获鼠标。

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

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

2 个答案:

答案 0 :(得分:5)

如果IInputElementUIElementUIElement3DIsVisibleIsEnabled必须是true

如果IInputElementContentElement,则没有IsVisible,因此IsEnabled必须为true。这当然是在您致电Mouse.Capture时。此外,包含视觉效果的PresentationSource的{​​{1}}必须为IInputElement

我认为这里的问题是另一个要立即捕获的元素,或者在您调用IMouseInputProviderIsVisiblefalse

答案 1 :(得分:2)

确保在MouseLeftButtonUp事件处理程序中调用ReleaseMouseCapture(),否则原始adornerlayer将保留它。

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

编辑:同时确保IsEnabled为真。