2012-04-11 68 views
2

我在同一个画布上有几个控件,可能会被另一个控件覆盖。它们都具有相同的zIndex,但是对于加载的订单,有些正在启动,另一些则已停止。 我的问题,如果Acontrol结束Bcontrol,我点击它们,但只有A获得点击事件。我怎样才能让B得到这个活动呢?谢谢。如何在wpf中单击鼠标时用较低的zindex获得控制权?

+0

已尝试将MouseClick事件中的处理属性设置为false? – Dominik 2012-04-11 06:37:27

+0

我试过了,但没有工作... – Cuero 2012-04-11 10:00:30

回答

2

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

如果您希望他们都能获得该事件,请将整个UI视为元素树。你所说的所有这些控制都是兄弟姐妹。当点击某件事物时,父母是第一个得到通知的人,如果它不处理该点击,它会传递给该父母在该鼠标位置的可见子元素,依此类推,直到处理完为止。要停止点击处理鼠标点击的孩子,唯一的方法是让所有兄弟姐妹的共同父母首先处理事件。

然后,您将不得不在父级处理程序中巧妙地执行一些操作,以调用可在鼠标下方找到的所有子元素的click事件 - 问题在于,尽管框架用于确定哪个控件在鼠标下面,你现在必须做那艰难的工作。

+0

最后,我接受你的建议,似乎工作得很好。谢谢! – Cuero 2012-04-12 01:37:01

1

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

您必须使用回调测试。这个可以让你跳过Acontrol来找到Bcontrol。如果你找到它,你可以把Bcontrol当作点击。

+0

感谢您的建议。 – Cuero 2012-04-12 01:35:37

相关问题