我在WPF程序中经常使用IsMouseOver
属性。不幸的是,我有来自视觉树其他分支的其他视觉元素,它们有时会掩盖我的控件。当它们覆盖我的控件时,即使我的鼠标在被覆盖的控件上,控件上的IsMouseOver
也会变为false。
我的控件怎么可能有一个像IsMouseOver
这样的属性,而不关心它是否在光标位置被覆盖?就像一个可以通过隧道投掷掩护的命中测试。
我看过这个解决方案,但我认为我不能使用它,因为它基本上每次鼠标移动时都会使用轮询。我认为这会大大减慢我的程序,因为我的视觉树是广泛的。
请注意,覆盖控件的视觉元素不是控件的子元素。
编辑:在进行覆盖的元素上将IsHitTestVisible
设置为false将是一个非常好的解决方案,但当我这样做时,覆盖元素根本不会与鼠标交互。我需要覆盖和覆盖元素对鼠标做出反应。
通过设置IsHitTestVisible="False"
使覆盖控件对命中测试不可见
<Grid>
<Control1/>
<!-- Control2 will visually "cover" Control1, but mouse events will "pass thru" To Control1 -->
<Control2 IsHitTestVisible="False"/>
</Grid>