如何在WPF中实现鼠标点击时控件的z-index降低?

5

我在同一画布上有几个控件,可能会相互覆盖。它们都具有相同的zIndex,但是由于加载顺序不同,有些在上面,有些在下面。 我的问题是如果A控件在B控件上方,并且我点击它们,但只有A接收到点击事件,如何让B也接收到事件?谢谢。


你尝试在 MouseClick 事件中将 handled 属性设置为 false 吗? - Dominik
2个回答

4
如果您希望所有控件都能接收到事件,请将整个UI视为一个元素树。您所谈论的所有这些控件都是兄弟节点。当单击某个子元素时,会通知其父元素,并将单击事件传递给该父元素下方的可见子元素,依此类推直到处理完毕。停止处理被单击的子元素的唯一方法是让所有兄弟节点的共同父节点先处理事件。
然后,在父处理程序中进行一些聪明的操作,以调用所有可以在鼠标下面找到的子元素的单击事件 - 问题在于,虽然框架曾经负责确定鼠标下方的控件,但现在您需要自己完成这项工作。如果您只想要后面的一个控件接收事件,那么对于第一个控件前面的所有控件,您必须将IsHitTestVisible = False设置为后面的控件才能接收事件 - 但这并不是您想要的。

1

没有机会。即使将MouseClick标记为未处理,它也会路由到父元素(Canvas)而不是兄弟元素。唯一的方法是命中测试。当用户单击Acontrol时,您应该使用命中测试来确定是否有另一个控件在其下方。

您必须使用带有回调的命中测试。这个命中测试允许您跳过Acontrol以查找Bcontrol。如果找到它,您可以将Bcontrol视为已单击。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接