我在同一个画布中有几个控件,可能一个被另一个覆盖。它们都具有相同的 zIndex,但是对于加载的顺序,一些向上,另一些向下。如果 Acontrol 超过 Bcontrol,我的问题是,我点击它们,但只有 A 获得点击事件。我怎样才能让 B 也得到这个事件?谢谢。
问问题
2524 次
2 回答
4
如果您只希望后面的那个来获取事件,那么对于第一个前面的所有控件,您必须设置IsHitTestVisible = False
后面的那个来获取事件 - 但这不是您想要的。
如果您希望他们都获得事件,请将整个 UI 视为元素树。您所说的所有这些控件都是同级控件。当单击某些内容时,父级是第一个得到通知的,如果它不处理单击,它将被传递到该父级在该鼠标位置的可见子元素,依此类推,直到它被处理。阻止被点击的孩子处理鼠标点击的唯一方法是让所有兄弟姐妹的共同父母首先处理该事件。
然后,您必须在父处理程序中执行一些巧妙的操作,以调用鼠标下方所有子元素的单击事件 - 问题在于,虽然框架过去常常努力确定哪个控件在鼠标下方,你现在将不得不做这项艰苦的工作。
于 2012-04-11T15:57:39.933 回答
1
没有机会。即使您将 MouseClick 标记为未处理,它也会路由到父元素(画布)而不是兄弟元素。唯一的方法是命中测试。当用户单击 Acontrol 时,您应该进行命中测试以确定其下是否有另一个控件。
您必须使用带有回调的命中测试。这允许您跳过 Acontrol 以找到 Bcontrol。如果你找到它,你可以将 Bcontrol 视为点击。
于 2012-04-11T08:35:26.890 回答