WPF 事件顺序

为了说明输入事件处理的工作方式,请看下面的输入事件示例。 在下面的树插图中,叶元素 #2PreviewMouseDownMouseDown配对事件的源:

the-order-of-wpf-event.png

叶元素 #2 执行鼠标按下操作后的事件处理顺序如下:

  1. 根元素上的 PreviewMouseDown 隧道事件。
  2. 中间元素 #1 上的 PreviewMouseDown 隧道事件。
  3. 叶元素 #2(源元素)上的 PreviewMouseDown 隧道事件。
  4. 叶元素 #2(源元素)上的 MouseDown 浮升事件。
  5. 中间元素 #1 上的 MouseDown 浮升事件。
  6. 根元素上的 MouseDown 浮升事件。

在其中调用处理程序的对象是由 sender 参数报告的对象。 对于任何给定的路由事件实例,引发事件的对象在事件通过元素树时不会更改,但 sender 会更改。 在上图的步骤 3 和 4 中,Source 和 sender 是同一对象。

如果输入事件处理程序完成了处理事件所需的特定于应用程序的逻辑,应将输入事件标记为已处理。 通常,一旦输入事件被标记为Handled,就不会调用事件路由路线上的后续处理程序。 但是,即使事件标记为已处理,也会调用已注册且HandledEventsToo参数设置为true的输入事件处理程序。