防止WPF事件隧道

时间:2009-12-02 13:18:03

标签: wpf events tunneling

我需要绘制很多WPF路径。我把它们设置为画布的孩子。问题是事件通过隧道传递到路径对象。这会降低性能。我知道重写预览方法可以解决问题,但是我真的必须覆盖所有预览方法..

3 个答案:

答案 0 :(得分:1)

我认为您可以在Canvas中捕获事件并将e.Handled设置为true。

答案 1 :(得分:0)

我找到了解决方案。我将路径对象的IsHitTestVisible属性设置为false。现在他们不会降低性能。

答案 2 :(得分:0)

不要复活旧问题但是,如果有例如按钮而不是路径,将IsHitTestVisible设置为true将不会正常,因为它有效地阻止了Click和其他事件。

在我的情况下,我有一个带有 PreviewMouseMove 事件的TabItem和一个非常TabItem上的Button,其中一个Click事件没有触发。 问题是,如果您在父控件上有一个隧道事件(如PreviewMouseMove),它将"覆盖"其子控件上的类似事件。 一个可能的解决方案 - 一个适合我的解决方案 - 正在选择一个不同的冒泡事件,例如 MouseMove

简而言之,冒泡事件传播到父元素,而隧道事件传播到子元素;还有直接事件根本不会传播。

有关here主题的更多信息。