我有一个非常复杂的视图,标签控件中有多个标签。在一个选项卡上有一个带有装饰层的控件。 Adorner层在MouseLeftButtonDown事件处理程序中调用CaptureMouse来捕获鼠标输入。一切正常。
但是如果我按特定顺序切换视图上的标签,然后单击adorner图层则无法捕获鼠标输入:CaptureMouse()返回false。同时Mouse.Captured返回null。托管装配层的控件可以继续正常工作,甚至可以捕获鼠标。
无法提供任何代码,因为有许多自定义控件在运行。在简化的布局中,一切正常。
任何有关CaptureMouse可能失败的建议?
答案 0 :(得分:5)
如果IInputElement
是UIElement
或UIElement3D
,IsVisible
和IsEnabled
必须是true
。
如果IInputElement
是ContentElement
,则没有IsVisible
,因此IsEnabled
必须为true
。这当然是在您致电Mouse.Capture
时。此外,包含视觉效果的PresentationSource
的{{1}}必须为IInputElement
。
我认为这里的问题是另一个要立即捕获的元素,或者在您调用IMouseInputProvider
时IsVisible
为false
。
答案 1 :(得分:2)
确保在MouseLeftButtonUp事件处理程序中调用ReleaseMouseCapture(),否则原始adornerlayer将保留它。
同时检查以确保您的链上还没有任何控件也可以捕获鼠标(您可以在装饰层中将处理设置为true以防止这种情况发生)
编辑:同时确保IsEnabled为真。