路由事件和附加事件之间的差异以及它们之间的差异?

Nis*_*sha 3 wpf xaml

我正在浏览WPF概念,我遇到了这些路由事件,依赖项属性和附加事件.我想我无法理解它们背后的概念以及它们为什么被用来代替.net的方法?

Bas*_*Bas 13

路由事件使元素树中的不同控件能够对事件做出反应.

举例来说,如果我们有一个WindowStackPanelButton并有人按下按钮上的鼠标键,活动将在这个顺序被解雇:

PreviewMouseDown on Window
PreviewMouseDown on StackPanel
PreviewMouseDown on Button
MouseDown on Button
MouseDown on StackPanel
MouseDown on Window
Run Code Online (Sandbox Code Playgroud)

这些"预览"事件使用称为的行为Tunneling.正常事件Bubble再次上升.

如果设置to 的Handled属性,隧道和冒泡将停止.隧道或冒泡称为路由策略.EventArgstrue

这样可以处理各种情况,例如:

  • 防止StackPanel的任何子元素接收鼠标按下事件.(设置HandledtrueStackPanel.PreviewMouseDown).
  • 处理Window上未按任何其他控件处理的按键(Window.KeyDown)

我建议不要调查附加事件,直到这变得绝对必要.附加事件的场景非常有限.附加事件也是路由事件.