SuperAPI AI 工具集

avalonia-events

编程与开发

查看项目

更新于 11-03 16:15

技能介绍

avalonia-events 是一个围绕 Avalonia 路由事件的使用参考,内容以说明和代码示例为主,覆盖事件订阅、路由策略、自定义事件、模板部件接线和常见错误。

用途 帮助正在使用 Avalonia 的开发者理解路由事件如何在逻辑树上传播,并在 XAML 或 C# 中正确订阅、拦截或停止事件。

主要能力

  1. 路由策略:介绍 Bubble(源到根,多数输入事件的默认策略)、Tunnel(根到源,约定使用 Preview 前缀)和 Direct(仅在源元素引发)三种方式,并说明 RoutingStrategies 枚举中 All 会同时触发隧道与冒泡两次。
  2. 订阅方式:给出 XAML 属性写法(如 Click、PointerPressed)、代码后置直接使用 +=,以及用 AddHandler 显式指定路由策略(隧道必须显式传入 RoutingStrategies.Tunnel),并提供 RemoveHandler 移除处理器的示例。
  3. 停止传播:通过 e.Handled = true 阻止路由中后续处理器继续触发。
  4. 自定义路由事件:演示用 RoutedEvent.Register 注册事件、编写 CLR 事件包装、在控件内部用 RaiseEvent 引发事件,以及继承 RoutedEventArgs 自定义事件参数(如 ValueChangedEventArgs)的写法。
  5. 隧道 Preview 事件:以 PreviewPointerPressed 为例说明自定义隧道事件的注册与使用模式。
  6. 模板部件:介绍 OnApplyTemplate 中通过 e.NameScope.Get 获取必需部件(缺失会抛异常)、用 Find 获取可选部件(缺失返回 null),以及模板变化时先解除旧订阅;还说明用 [TemplatePart] 声明预期部件,以及 PART_ 命名约定。
  7. 静态类处理器:在静态构造函数中用 AddClassHandler 为所有控件实例挂接子控件事件或隧道事件。
  8. 焦点与手势事件:说明 12.0 中的 FocusChangedEventArgs 及可取消的 GettingFocus/LosingFocus(FocusChangingEventArgs),11.x 的 GotFocusEventArgs,以及 Tapped、RightTapped、DoubleTapped、Holding、Pinch、ScrollGesture、SwipeGesture 等路由手势事件;对比 11.x 的 Gestures.Pinch 与 12.0 的直接 Pinch 写法,并指出 AddHandler 订阅 TappedEvent 在各版本均可用。
  9. 非路由事件:说明 AttachedToVisualTree/DetachedFromVisualTree 不参与路由,可直接重写并在其中安全访问 TopLevel 或清理订阅。
  10. 常见错误:总结 += 默认只捕获冒泡、隧道事件需显式指定策略、new RoutedEventArgs 需传入 this 作为源、忘记设置 Handled、OnApplyTemplate 未清理旧订阅、12.0 焦点与手势 API 变化,以及 Get 与 Find 在缺失部件时的行为差异。

使用方式 资料本身是技能参考文档,通过阅读对应章节并复制示例代码到 Avalonia 项目中即可参考使用;未提供安装命令、包名或独立运行步骤。版本相关说明指向 avalonia-versions 一节。

适用场景 适用于需要处理父容器统一捕获子控件点击、在子控件之前预览拦截输入、定义并引发自定义路由事件、编写带模板部件的自定义控件、为所有实例统一挂接事件,或适配 11.x 与 12.0 焦点和手势事件差异的 Avalonia 开发场景。

限制 资料为事件机制参考,未提供完整的项目配置、依赖安装、版本支持范围、性能数据或收费信息;具体行为仍以所用 Avalonia 版本的实际 API 为准。