我有几个控件在同一个画布,可以一个被另一个覆盖。 他们都是具有相同的zIndex的,但对于加载顺序,有些是向上和别人走过。 我的问题,如果Acontrol超过B控制,我点击它们,但只有得到click事件。 我怎样才能使乙获得的情况下,太? 谢谢。
Answer 1:
如果你只是想在后面的一个到达的情况下,那么对于所有的控件中的第一个前,你必须设置IsHitTestVisible = False
对于一个在后面得到事件-但是这不是你想要的。
如果你希望它们都得到事件觉得作为元素树整个UI的。 所有你谈论这些控件都是兄弟姐妹。 当用户点击的东西,父母是第一个得到通知,如果不处理一下,它就会向下传递给家长的可视子元素在那个鼠标的位置,依此类推,直到它的处理。 你才停止被从处理点击鼠标点击的方式孩子是让所有的兄弟姐妹的共同父先处理该事件。
然后,您将不得不做一些在父母的处理程序来调用,可以在鼠标下方可以找到所有子元素的单击事件聪明 - 问题是,而框架用来做决定的辛勤工作,其控制是在鼠标下,你现在必须做艰苦的工作。
Answer 2:
没有机会。 即使你鼠标点击标记为未处理的,将父元素(Canvas)的路线不是兄弟。 唯一的办法就是命中测试。 当Acontrol用户点击你应该打测试 ,以确定另一控制是否在它之下。
您必须使用点击测试与回调。 这一个允许跳过Acontrol,以便找到B控制。 如果你找到它,你可以点击作为治疗B控制。
文章来源: How to get control with lower zindex when mouse clicked in wpf?