0

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

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

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

CaptureMouse 可能会失败的任何建议?

4

2 回答 2

5

如果IInputElement是 aUIElement或 a UIElement3DIsVisibleIsEnabled必须是true

如果IInputElement是一个ContentElement,那么就没有IsVisible那么IsEnabled一定是true。这当然是在你打电话的时候Mouse.Capture。此外,包含视觉对象的PresentationSourceforIInputElement必须具有IMouseInputProvider.

我认为这里的问题要么是另一个元素立即被捕获,要么IsVisiblefalse在你打电话的时候Capture

于 2012-11-18T18:58:59.337 回答
2

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

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

编辑:还要确保 IsEnabled 为真。

于 2012-07-31T22:40:41.210 回答