2011-04-04 107 views
2

我的WPF用户控件由几个子组件构成,它们以彼此重叠(有时完全)的方式放置,但它们在可视化树上处于同一级别(每个子组件的父级都是主电网)。我希望将鼠标事件从最顶层传递到最底层,但是默认的WPF行为将它们传递给可视化树形路径,而不是它们的Z顺序。不幸的是,不可能将其中一个嵌入另一个中(以利用默认机制)。我该如何解决这个问题?将鼠标事件传递给重叠控件

此致敬礼 - Spook。

+0

为什么不可能嵌入它们? – 2011-04-04 11:49:38

+0

@ H.B.:大概是因为它们在一般情况下并不完全重叠。 – Jon 2011-04-04 11:59:13

回答

1

一个简单的解决方案是处理父母Grid中的所有事件,方法是不在子控件中附加任何处理程序,并将基于子Z顺序的事件手动“路由”到网格的子节点。

这将需要大量的手动工作,但我似乎无法找到任何其他方式来实现WPF中的自定义路由策略。

1

如果您的具体情况要求所有子组件在可视化树中处于相同级别,那么最好的做法是对所有子组件设置IsHitTestVisible标志为false,在顶级设备上捕获鼠标事件,大多数级别,然后手动选择适合鼠标事件的子组件。