在wpf中单击鼠标时如何使用较低的z索引进行控制?

时间:2012-04-11 06:30:55

标签: c# wpf controls mouseevent z-index

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

2 个答案:

答案 0 :(得分:3)

如果您只想让后面的那个获得该事件,那么对于第一个之前的所有控件,您必须为后面的一个设置IsHitTestVisible = False才能获得该事件 - 但这不是不管你想要什么。

如果您希望所有人都将事件视为一个元素树。你所谈论的所有这些控制都是兄弟姐妹。单击某些内容时,父对象是第一个得到通知的,如果它不处理单击,则它会在该鼠标位置向下传递给该父级的可见子元素,依此类推,直到处理完为止。阻止点击处理鼠标点击的孩子的唯一方法是让所有兄弟姐妹的共同父母首先处理事件。

然后你必须在父的处理程序中做一些聪明的事情来调用可以在鼠标下面找到的所有子元素的click事件 - 问题是,而框架用于做出确定哪个控件的艰苦工作在老鼠的帮助下,你现在必须付出艰苦的努力。

答案 1 :(得分:1)

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

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