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

选区与剪贴板

选区用于表达用户当前选中的文本、行、单元格、树节点或文档范围。剪贴板负责把选区转换为可复制文本。

选区类型

不同组件的选区模型不同:

  • 文本输入:字符范围。
  • TextArea:多行文本范围。
  • TreeView:节点。
  • DataGrid:行、单元格或范围。
  • MarkdownViewer:文档文本片段。
  • MedicalRecordEditor:文档全局范围和可视渲染投影。

组件不应强行共享一种选区结构,而应提供统一的复制能力。

CopyableSelection

可复制组件应能把当前选区转换为文本。复制内容应符合用户预期,而不是内部对象结构。

示例:

  • TreeView 复制当前节点路径和值。
  • DataGrid 复制当前行或单元格范围。
  • MarkdownViewer 复制用户拖选文本。
  • ObjectInspector 复制节点完整路径和值。

剪贴板控制

ClipboardController 负责识别复制快捷键和写入文本。组件需要提供当前可复制内容。

复制行为应遵守:

  • 没有选区时不写入无意义内容。
  • 大范围复制需要有清晰格式。
  • 调试组件应复制完整值,而不是只复制省略文本。

医疗文档选区

大文档选区不应每次拖动都展开全量文档树。适合使用全局范围和可视页投影,绘制时只判断可视渲染对象是否与选区相交。

这类设计可以把拖选和重绘复杂度限制在可视范围内。

性能原则

  • 拖选过程不要构建全量选区对象。
  • 鼠标移动路径不要递归扫描整个文档。
  • 复制命令执行时可以按需构建完整内容。
  • 选区高亮绘制应只处理可视区域。