我怎么能让IsMouseOver不在乎其他东西掩盖控制



我在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>

最新更新