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

焦点与输入

焦点决定键盘输入落到哪个组件。输入体系负责处理普通键入、中文组合输入、粘贴和文本编辑会话。

焦点管理

FocusManager 管理当前焦点对象。可输入或可键盘操作的组件需要正确注册和释放焦点能力。

常见可聚焦组件:

  • RenderTextBox
  • RenderTextArea
  • RenderComboBox
  • RenderDatePicker
  • RenderTreeView
  • RenderDataGrid
  • RenderPlainTextEditor
  • RenderMedicalRecordEditor

文本输入

文本输入通常通过隐藏输入承接浏览器输入能力,再由组件把输入结果应用到自己的模型。

需要特别处理:

  • 中文 composition update。
  • composition end。
  • 粘贴。
  • Enter、Escape、Tab。
  • 光标位置同步。
  • 选区替换输入。

中文输入

中文输入过程中,composition update 应能实时更新预编辑内容,但不能破坏最终提交逻辑。composition end 时再把最终文本提交到模型。

组件应避免把超大文本长时间保留在隐藏输入中。粘贴大文本时,应优先读取剪贴板事件数据,处理后清空输入承接元素。

焦点丢失

组件在失去焦点时通常需要:

  • 结束编辑状态。
  • 提交或取消临时值。
  • 隐藏光标。
  • 关闭不应继续存在的弹窗。
  • 清理 composition 状态。

但不是所有 Enter 或 Escape 都应该导致 blur。是否失焦应由组件语义决定。

性能原则

  • 光标闪烁只应触发必要重绘。
  • 焦点切换不应触发布局全量刷新。
  • 大文本编辑器不能每次输入都把全文同步到浏览器 textarea。
  • 组合输入和粘贴路径要避免全量扫描大文档。