UI 自动化 TextPattern 概述

更新:2007 年 11 月

本概述描述如何使用 Microsoft UI 自动化来公开支持 UI 自动化的平台中文本控件的文本内容,包括格式和样式属性。这些控件包括但不限于 Microsoft .NET FrameworkTextBoxRichTextBox 及其等效的 Win32 控件。

公开控件的文本内容是通过使用 TextPattern控件模式完成的,该元素将文本容器的内容表示为文本流。相应地,TextPattern 需要支持 TextPatternRange 类以公开格式和样式属性。TextPatternRange 支持 TextPattern,方式为通过 StartEnd 终结点的集合来表示文本容器中相邻的文本范围,或多个分离的文本范围。TextPatternRange 支持选择、比较、检索和遍历等功能。

说明:

TextPattern 类不提供插入或修改文本的方法。但是,根据控件的不同,可以通过 UI 自动化ValuePattern 或通过直接键盘输入来实现这一点。有关示例,请参见 ValuePattern 插入文本示例

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

本主题包括下列各节。

  • UI 自动化 TextPattern 与文本服务框架
  • 控件类型
  • TextPattern 客户端 API
  • TextPattern 提供程序 API
  • 安全性
  • 性能
  • TextPattern 术语
  • 相关主题

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

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

但是,设计的 TSF 所针对的应用程序需要将输入内容插入到可识别上下文的方案中。但 TextPattern 是一个只读解决方案(提供上文所述的有限解决方法),旨在对用于屏幕阅读器和盲文设备的文本存储提供优化的访问。

简而言之,需要对文本存储进行只读访问的辅助技术可以使用 TextPattern,但对于可识别上下文的输入则需要更复杂的 TSF 功能。

控件类型

Text

Text 控件是屏幕上表示文本段的基本元素。

独立的文本控件可用作窗体上的标签或静态文本。Text 控件还可以包含在 ListItemTreeItemDataItem 的结构中。

说明:

Text 控件可能不会出现在 UI 自动化树的内容视图中(请参见 UI 自动化树概述)。这是因为文本控件经常通过另一个控件的 Name 属性进行显示。例如,用于标记 Edit 控件的文本就是通过该 Edit 控件的 Name 属性显示的。由于该 Edit 控件位于 UI 自动化树的内容视图中,因此不需要文本元素自身位于 UI 自动化树的该视图中。显示在内容视图中的文本只是非冗余信息的文本。这样,所有辅助技术都可以快速筛选出只有其用户需要的那些信息段。

Edit

Edit 控件使用户可以查看和编辑单行文本。

说明:

在特定的布局方案中,单行文本可能会换行。

Document

Document 控件使用户可以从多个文本页中进行导航及获取信息。

TextPattern 客户端 API

System.Windows.Automation.TextPattern Class

Microsoft UI 自动化文本模型的入口点。

此类还包含两个 TextPattern 事件侦听器:TextSelectionChangedEventTextChangedEvent

System.Windows.Automation.Text.TextPatternRange Class

支持 TextPattern 的文本容器内文本范围的表示形式。

UI 自动化客户端应注意使用 TextPatternRange 创建的文本范围的当前有效性。如果文本控件中的原始文本完全被新文本替换,则当前的文本范围将会失效。但是,如果只有部分原始文本发生更改并且基础文本控件使用定位点(或终结点)而非绝对字符定位来管理其文本“指针”,则文本范围在一定程度上可能仍然有效。

客户端可以侦听 TextChangedEvent 以获得对其所处理文本内容的任何更改的通知。

System.Windows.Automation.AutomationTextAttribute Class

用于标识文本范围的格式设置属性。

TextPattern 提供程序 API

对于通过实现 ITextProviderITextRangeProvider 接口(自身实现或通过 Microsoft UI 自动化代理实现)支持 TextPattern 的 UI 元素或控件,除了能够提供强大的导航功能外,还能够公开其所包含的任何文本的详细属性信息。

如果控件无法支持所有特定的属性,则 TextPattern 提供程序就不必支持所有文本属性。

如果控件支持在文本区域内进行文本选择或文本光标(或系统插入符号)定位,则 TextPattern 提供程序必须支持 GetSelectionSelect 函数。如果控件不支持这些功能,则不必要支持其中的任何一种方法。但是,控件必须通过实现 SupportedTextSelection 属性来公开它所支持的文本选择类型。

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

说明:

提供程序可以通过按以下顺序使用受支持的第二大 TextUnit 来跳过对特定 TextUnit 的支持:CharacterFormatWordLineParagraphPageDocument

ITextProvider Interface

公开支持客户端应用程序中的 TextPattern 的方法、属性 (Property) 和属性 (Attribute)(请参见 ITextProvider)。

ITextRangeProvider Interface

表示文本提供程序中的文本范围(请参见 ITextRangeProvider)。

System.Windows.Automation.TextPatternIdentifiers Class

包含用作文本提供程序标识符的值(请参见 TextPatternIdentifiers)。

安全性

在设计 UI 自动化体系结构时考虑了安全性(请参见 UI 自动化安全性概述)。但是,本概述中描述的 TextPattern 类需要考虑一些特定的安全注意事项。

  • Microsoft UI 自动化文本提供程序提供只读接口,不提供更改控件中现有文本的功能。

  • 如果 UI 自动化客户端完全“受信任”,则它们只能使用 Microsoft UI 自动化。例如受保护的登录桌面,其中只有已知的受信任应用程序可以运行。

  • UI 自动化提供程序的开发人员应该意识到,他们选择通过 Microsoft UI 自动化在其控件中公开的所有信息实质上是公共信息,可由其他代码进行完全访问。Microsoft UI 自动化对于确定任何 UI 自动化客户端的可信度并不做任何努力,因此 UI 自动化提供程序不应公开受保护的内容或敏感的文本信息(如密码字段)。

  • 对 Windows Vista 的安全性进行的一项最重大更改通常称为“安全输入”,它包括最少特权(或受限制)用户帐户 (LUA) 和 UI 特权等级隔离 (UIPI) 等技术。

    • UIPI 防止一个程序控制和/或监控另一个具有更多“特权”的程序,防止欺骗用户输入的跨进程窗口消息攻击。

    • LUA 对 Administrators 组中用户所运行应用程序的特权设置限制。应用程序不一定具有管理员特权,而是将使用必需的最少特权运行。因此,在 LUA 方案中可能实施了一些限制。最值得注意的是字符串截断(包括 TextPattern 字符串),其中可能必须限制从管理员级别应用程序检索的字符串大小,以便不会强制它们将内存分配到禁用该应用程序的程度。

性能

由于 TextPattern 的大多数功能都依赖于跨进程调用,因此它在处理内容时不提供缓存机制来改善性能。这与 Microsoft UI 自动化中可使用 GetCachedPatternTryGetCachedPattern 方法访问的其他控件模式不同。

提高性能的一种策略是确保 UI 自动化客户端尝试使用 GetText 检索中等大小的文本块。例如,GetText(1) 调用将对每个字符产生跨进程命中,而一个 GetText(-1) 调用将产生一个跨进程命中,但根据文本提供程序的大小可以具有较长的滞后时间。

TextPattern 术语

  • 属性
    文本范围的格式设置特性(例如,IsItalicAttributeFontNameAttribute)。

  • 退化范围
    退化范围是空的文本范围或零字符文本范围。对 TextPattern 控件模式来说,文本插入点(或系统插入符号)被视为一个退化范围。如果未选择文本,GetSelection 将在文本插入点处返回退化范围,而 RangeFromPoint 会返回退化范围作为其起始终结点。在文本提供程序找不到与给定条件匹配的任何文本范围时,RangeFromChildGetVisibleRanges 可能返回退化范围。此退化范围可用作文本提供程序中的起始终结点。FindTextFindAttribute 返回空引用(在 Microsoft Visual Basic .NET 中为 Nothing)以避免将发现的范围与退化范围相混淆。

  • 嵌入对象
    UI 自动化文本模型中有两种类型的嵌入对象。它们由基于文本的内容元素(如超链接或表)和控件元素(如图像和按钮)组成。有关详细信息,请参见 使用 UI 自动化访问嵌入式对象

  • 终结点
    文本容器中文本范围的绝对Start点或End点。 

下面演示了一组起点和终点。

TextPatternRangeEndpoints(开始和结束)。

  • TextRange
    文本容器中具有起点和终点的文本范围的表示形式,包括所有关联的属性和功能。

  • TextUnit
    用于在文本范围的逻辑段中进行导航的预定义文本单元(字符、单词、行或段落)。

请参见

任务

在 UI 自动化中使用缓存

在 UI 自动化提供程序中支持控件模式

概念

客户端的 UI 自动化控件模式

UI 自动化控件模式概述

UI 自动化树概述

UI 自动化客户端的控件模式映射

其他资源

文本服务框架