【WPF】WPF 事件

Windows Presentation Foundation (WPF) 引入了路由事件,这些事件可以在应用程序的元素树中调用存在于各个侦听器上的处理程序。

路由事件
可以从功能或实现的角度来考虑路由事件。

功能定义:路由事件是一种可以针对元素树中的多个侦听器(而不是仅针对引发该事件的对象)调用处理程序的事件。

实现定义:路由事件是一个 CLR 事件,可以由 RoutedEvent 类的实例提供支持并由 Windows Presentation Foundation (WPF) 事件系统来处理。

典型的 WPF 应用程序中包含许多元素。
无论这些元素是在代码中创建的还是在 XAML 中声明的,它们都由共同所在的元素树关联起来。
根据事件的定义,事件路由可以按两种方向之一传播,但是通常会在元素树中从源元素向上“冒泡”,直到它到达元素树的根(通常是页面或窗口)。

路由策略

路由事件使用以下三个路由策略之一:

  • 冒泡:针对事件源调用事件处理程序。路由事件随后会路由到后续的父元素,直到到达元素树的根。大多数路由事件都使用冒泡路由策略。冒泡路由事件通常用来报告来自不同控件或其他 UI 元素的输入或状态变化。

  • 直接:只有源元素本身才有机会调用处理程序以进行响应。这与 Windows 窗体用于事件的“路由”相似。但是,与标准 CLR 事件不同的是,直接路由事件支持类处理(类处理将在下一节中介绍)而且可以由 EventSetterEventTrigger 使用。

  • 隧道:最初将在元素树的根处调用事件处理程序。随后,路由事件将朝着路由事件的源节点元素(即引发路由事件的元素)方向,沿路由线路传播到后续的子元素。在合成控件的过程中通常会使用或处理隧道路由事件,这样,就可以有意地禁止显示复合部件中的事件,或者将其替换为特定于整个控件的事件。在 WPF 中提供的输入事件通常是以隧道/冒泡对实现的。隧道事件有时又称作 Preview 事件,这是由隧道/冒泡对所使用的命名约定决定的。

附加事件
可扩展应用程序标记语言 (XAML) 定义了一个语言组件和称为“附加事件”的事件类型。
附加事件的概念允许您针对特定事件为任意元素(而不是为实际定义或继承该事件的元素)添加处理程序。
在这种情况下,对象既不会引发该事件,目标处理实例也不会定义或“拥有”该事件。

原文地址:https://www.cnblogs.com/ningth/p/1163828.html