【发布时间】:2010-12-22 09:58:48
【问题描述】:
我需要绘制很多 WPF 路径。我已将它们设置为画布的孩子。问题是事件被隧道化到路径对象。这会减慢性能。我知道覆盖预览方法可以解决问题,但我真的必须覆盖所有预览方法吗..
【问题讨论】:
我需要绘制很多 WPF 路径。我已将它们设置为画布的孩子。问题是事件被隧道化到路径对象。这会减慢性能。我知道覆盖预览方法可以解决问题,但我真的必须覆盖所有预览方法吗..
【问题讨论】:
我认为您可以在 Canvas 中捕获事件并将 e.Handled 设置为 true。
【讨论】:
我找到了解决方案。我将路径对象的 IsHitTestVisible-property 设置为 false。现在它们并没有降低性能。
【讨论】:
不是要复活旧问题,而是,如果有例如按钮而不是路径,将 IsHitTestVisible 设置为 true 是不行的,因为它可以有效地防止 Click 和其他事件。
在我的例子中,我有一个带有 PreviewMouseMove 事件的 TabItem 和一个带有未触发 Click 事件的 TabItem 上的按钮。 问题是,如果您在父控件上获得 tunneling 事件(如 PreviewMouseMove),它将“覆盖”其子控件上的类似事件。 一种可能的解决方案 - 对我来说很有效 - 选择一个不同的 bubbling 事件,例如 MouseMove。
简而言之,冒泡事件传播到父元素,而隧道事件传播到子元素;还有一些直接事件根本不传播。
更多关于主题here。
【讨论】: