关于 Text 和 TextRange 控件模式

控件的文本内容是使用 Text 控件模式公开的,该模式将文本容器的内容表示为文本流。 Text 控件模式需要 TextRange 控件模式的支持才能公开格式和样式属性。 TextRange 控件模式通过表示文本容器中具有开始和结束终结点集合 (或范围) 连续或多个不连续文本范围,支持 Text 控件模式。 TextRange 控件模式支持选择、比较、检索和遍历等功能。

注意

Text 控件模式不提供插入或修改文本的方法。 但是,根据控件的不同,这可以通过使用 Microsoft UI 自动化 Value 控件模式或通过直接键盘输入来实现。 还有一个 TextEdit 模式,它支持以编程方式更改文本。

 

本主题中所述的功能对于辅助技术供应商及其最终用户至关重要。 辅助技术可以使用UI 自动化为用户收集完整的文本格式设置信息,并通过 TextUnit (字符、单词、行或段落) 提供编程导航和文本选择。

本主题包含以下各节:

UI 自动化 TextPattern 和文本服务框架

文本服务框架 (TSF) 是一种简单且可缩放的系统框架,可在桌面和应用程序中启用自然语言服务和高级文本输入。 除了为应用程序提供用于公开其文本存储的接口外,它还支持文本存储的元数据。

TSF 专为需要将输入注入上下文感知方案的应用程序而设计。 但是, 文本 控件模式是一种只读解决方案,旨在为屏幕阅读器和盲文设备提供对文本存储的优化访问。

需要对文本存储进行只读访问的可访问技术可以使用文本控件模式,但需要 TSF 的功能进行上下文感知输入。

有关详细信息,请参阅 文本服务框架

控件类型

UI 自动化编辑控件类型和文档控件类型必须支持文本控件模式。 为了改进辅助功能,Microsoft 建议 工具提示 和文本控件类型也支持文本控件模式,但这不是必需的。

提供程序接口

UI 自动化提供程序通过实现 ITextProviderITextRangeProvider 接口来支持控件的文本控件模式。 这些接口公开控件中文本的详细属性信息,并提供可靠的导航功能。

如果控件缺少对任何特定属性的支持,则提供程序不需要支持所有文本属性。

如果控件支持文本选择或文本光标 (或系统插入符号) 的文本选择或放置,则提供程序必须支持 ITextProvider::GetSelectionITextRangeProvider::Select 方法。 如果控件不支持此功能,则它不需要支持其中任一方法。 但是,控件必须通过实现 ITextProvider::SupportedTextSelection 属性来公开它支持的文本选择类型。

提供程序必须始终支持 TextUnit 常量、 TextUnit_CharacterTextUnit_Document,以及它能够支持的任何其他常量。

注意

提供程序可以通过按以下顺序延迟到支持的第二大单位来跳过对特定 TextUnit 的支持: TextUnit_CharacterTextUnit_FormatTextUnit_WordTextUnit_LineTextUnit_ParagraphTextUnit_PageTextUnit_Document

 

客户端接口

UI 自动化客户端应用程序使用 IUIAutomationTextPatternIUIAutomationTextRange 接口来访问文本控件的文本内容。 客户端使用 IUIAutomationTextPattern 选择称为 文本范围的文本范围,并检索指向 区域 IUIAutomationTextRange 接口的指针。 借助 IUIAutomationTextRange 接口,客户端可以操作文本范围,并检索有关该区域中文本的信息,包括字体名称、前景颜色、下划线样式等属性。 有关详细信息,请参阅 文本属性标识符

性能

文本控件模式的大部分功能依赖于跨进程调用,因此它不提供缓存机制来提高处理内容时的性能。 可以使用 IUIAutomationElement::GetCachedPattern 方法访问 Microsoft UI 自动化中的其他控件模式。

提高性能的一种方法是确保UI 自动化客户端尝试使用 IUIAutomationTextRange::GetText 方法检索中等大小的文本块。 例如,使用 GetText 检索单个字符将导致每个字符的跨进程命中,而在调用 GetText 时不指定最大长度会导致一次跨进程命中,但延迟可能较高,具体取决于文本范围的大小。

文本模式和虚拟化嵌入对象

只要有可能, ITextProviderITextRangeProvider 的提供程序实现应支持文档的整个文本,包括视区外部的任何文本。 对于虚拟化的屏幕外文本或嵌入对象,提供程序应支持 VirtualizedItem 控件模式 (IVirtualizedItemProvider) 。

如果在整个文本流仍然可用时虚拟化文档, 则 ITextProvider::D ocumentRange 属性将检索包含整个文档的文本范围。 但是,调用 ITextRangeProvider 方法将检索表示文档中所有嵌入对象的虚拟化对象的集合。 若要与虚拟化嵌入式对象交互,客户端必须调用 IVirtualizedItemProvider::Realize 方法,该方法使项作为UI 自动化元素完全可访问。 客户端必须遵循类似的过程来处理嵌入表中的网格元素,其中表中的一部分是屏幕外和虚拟化的。

将自定义控件类型与文本控件模式配合使用

虽然 Text 控件模式支持许多文本属性和嵌入对象,但无法提前定义所有可能的文档元素和演示文稿类型。 对于现有属性或标准控件类型不支持的文档元素,提供程序可以使用UI 自动化 Custom 控件类型提供的扩展性功能。

对于基于页面演示文稿的应用程序和用户界面,“页面”的边界和布局表示形式也可以表示为具有自定义控件类型 (LocalizedControlType="page") 的嵌入对象。 这样,嵌入对象可以托管其他页面元素,这些元素不能轻易成为文档文本流的一部分,例如每个页面的页眉和页脚字段,作为“页面”嵌入对象的子级。 或者,每个“页面”对象都可以独立支持 文本 控件模式,这适用于幻灯片放映演示文稿的创作工具或基于页面的桌面发布环境等应用程序。

文本范围的生存期

如果可能,提供程序应确保任何文本更改(如删除、插入和移动)都反映在关联的文本区域中。 如果无法更新文本范围,提供程序应引发 UIA_Text_TextChangedEventId 事件,以通知客户端文本范围不再有效,并且必须检索新的文本范围。

概念性

UI 自动化如何支持嵌入对象

UI 自动化控件模式概述

对文本内容的UI 自动化支持

使用基于文本的控件

其他资源

文本服务框架