DirectSurface UIDirectSurface UI
开始使用
文档/核心概念

事件路由

事件路由负责把浏览器输入转换为框架内的组件事件。它连接命中测试、焦点、手势和组件交互。

输入来源

常见输入来源包括:

  • pointer down / move / up。
  • wheel。
  • keyboard。
  • composition 输入。
  • paste。
  • context menu。

不同组件只处理自己关心的事件。

指针事件

指针事件通常先经过命中测试,再派发给命中的组件。可交互组件根据自身状态决定是否处理事件。

典型行为:

  • Button 在 pointer down 时进入 pressed 状态。
  • TreeView 根据点击位置选择、展开或勾选节点。
  • DataGrid 根据单元格位置选择、编辑或拖拽列宽。
  • ScrollViewer 根据 wheel 更新滚动位置。

键盘事件

键盘事件通常和焦点相关。当前焦点组件优先处理键盘事件;如果它不处理,事件可以继续交给上层或快捷键系统。

常见键:

  • Enter:提交、触发默认动作或搜索下一项。
  • Escape:关闭弹窗或取消编辑。
  • Tab:焦点导航。
  • Arrow keys:列表、树、表格和菜单导航。

手势和捕获

拖拽、滚动条、列宽调整、选区拖选等交互需要在 pointer down 后持续接收后续事件。组件应在交互结束、取消或销毁时释放相关状态。

ContextMenu

右键菜单通常根据当前命中对象生成局部命令。菜单项应来自当前上下文,而不是常驻在每个行或节点上。

设计原则

  • 事件处理应尽量局部化。
  • 不要在 pointer move 中做全量数据计算。
  • 不要在事件处理里创建大量临时对象。
  • 组件销毁时必须清理拖拽、弹窗、输入会话和订阅。