防止 WPF 事件隧道传递

3

我需要绘制大量的WPF路径。我已经将它们设置为画布的子元素。问题是事件会被传递到路径对象,这会降低性能。我知道覆盖预览方法可以解决问题,但我真的需要覆盖所有预览方法吗?

3个回答

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

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

1

不是为了重提旧问题,但如果有按钮而不是路径,则将IsHitTestVisible设置为true将不会是可行的,因为它实际上会阻止Click和其他事件。

在我的情况下,我有一个带有PreviewMouseMove事件的TabItem和一个按钮,该按钮具有未触发的Click事件。 问题在于,如果您在父控件上获得了隧道事件(例如PreviewMouseMove),则它将“覆盖”其子控件上的类似事件。 可能的解决方案-对我有效的解决方案之一-是拾取不同的冒泡事件,例如MouseMove。

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

关于这个主题的更多信息在这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接