如何在 wpf 中单击鼠标时使用较低的 zindex 获得控制权

本文关键字:zindex 控制权 wpf 单击 鼠标 | 更新日期: 2023-09-27 18:30:46

我在同一画布中有几个控件,其中一个可能被另一个覆盖。它们都具有相同的 zIndex,但对于加载的订单,有些是向上的,有些是向下的。我的问题 如果 Acontrol 在 Bcontrol 上,我点击了它们,但只有 A 获得了点击事件。我怎样才能让 B 也获得活动?谢谢。

如何在 wpf 中单击鼠标时使用较低的 zindex 获得控制权

如果您只想让后面的控件获取事件,那么对于第一个控件前面的所有控件,您必须为后面的控件设置IsHitTestVisible = False以获取事件 - 但这不是您想要的。

如果希望它们都获取事件,请将整个 UI 视为元素树。您所说的所有这些控件都是同级。当单击某些内容时,父级是第一个收到通知的人,如果它不处理单击,它将在鼠标位置向下传递到该父级的可见子元素,依此类推,直到它被处理。阻止被单击的子项处理鼠标单击的唯一方法是让所有同级的共同父级首先处理事件。

然后,您必须在父级的处理程序中执行一些聪明的操作,以调用可以在鼠标下方找到的所有子元素的单击事件 - 问题是,虽然框架用于确定哪个控件在鼠标下,但现在您必须完成这项艰苦的工作。

没有机会。即使您将鼠标单击标记为未处理,它也会路由到父元素(画布)而不是同级元素。唯一的方法是命中测试。当用户单击"控件"时,应进行命中测试以确定其下是否有另一个控件。

必须对回调使用命中测试。这个允许你跳过Acontrol以找到Bcontrol。如果找到它,则可以将 Bcontrol 视为单击。