设计自定义属性、事件和控件模式

自定义属性、事件或控件模式的设计在各种控件实现中应很有用。 应避免仅在有限的方案中使用的控制或特定于应用程序的设计。 设计应遵循现有Microsoft UI 自动化属性、事件和控件模式的示例,这些模式经过精心指定,以满足各种辅助功能和自动化测试应用程序的需求。

实现自定义属性、事件或控制模式的规范涉及客户端和提供商双方的合作和协议,并且要求双方一致地实现规范。 鼓励公司与行业组织(如 辅助功能互作性联盟(AIA) 合作,设计并发布自定义属性、事件或控制模式的规范。 通过这种方式,可以达成共识,并可以确保与各种应用程序之间的互作性。

本主题包含以下部分:

何时使用自定义属性和事件

在创建自定义属性、事件或控件模式之前,请确保 UI 自动化不提供现有解决方案。 例如,创建自定义“单击”控件模式并不是必需的,因为 调用 控件模式已经描述了该功能。

如果确定需要自定义属性、事件或控件模式,请确保它不太模糊或泛型。 例如,名为“Show”的控件模式没有用处,因为控件的可见性可以通过元素上的可用性属性(如 UIA_IsExpandCollapsePatternAvailablePropertyIdUIA_IsScrollItemPatternAvailablePropertyId)来指示。

在实现自定义解决方案之前,请仔细确认它是否是必需的,然后完全设计功能。

设计自定义属性

UI 自动化包括两种基本类型的属性:自动化元素属性和控件模式属性。 自动化元素属性由一组常见的属性(如 Name、AcceleratorKey 和 ClassName)组成,这些属性由所有 UI 自动化元素公开,而不管控件类型如何。 控件模式属性通过特定控件模式公开。 每个控件模式都有一组相应的控件模式属性,控件必须公开这些属性。 例如,支持 网格 控件模式的控件公开 ColumnCount 和 RowCount 属性。

自定义自动化元素属性或控件模式属性应遵循以下设计准则:

  • 自定义属性必须具有由 UIAutomationType 枚举指定的以下数据类型之一。 自定义属性不支持其他数据类型。
    • UIAutomationType_Bool
    • UIAutomationType_Double
    • UIAutomationType_Element
    • UIAutomationType_Int
    • UIAutomationType_Point
    • UIAutomationType_String
  • 如果自定义属性包含字符串数据(BSTR),则规范必须声明该属性是否可本地化(也就是说,字符串是否可以翻译成不同的 UI 语言)。
  • 自定义属性不应与现有属性的特性或功能重叠。

设计自定义事件

应用程序使用 UI 自动化事件通知来响应涉及 UI 项的更改和作。 大多数属性都具有 UI 自动化在属性值更改时引发的属性更改事件。 如果引入自定义属性,应考虑引入可能还需要的任何相应自定义事件。

自定义事件应遵循以下设计准则:

  • 自定义事件必须是“无状态”。它不能与特定属性或值相关联。
  • 自定义事件不应与任何现有事件的定义或角色重叠。

自定义 UI 自动化事件和 WinEvents

WinEvents 是 Microsoft Windows 平台中有用的进程间通信和事件机制。 但是,引入新的 WinEvent ID 是有风险的,因为它可能会导致与其他应用程序或作系统冲突,导致系统变得不稳定。 为了避免冲突,Microsoft定义了多个不同的 WinEvent 类别,并且对于每个类别,已定义一个或多个值范围以用作 WinEvent ID。 有关详细信息,请参阅 WinEvent ID 的分配

自定义 UI 自动化事件通过在 UI 自动化框架内部分配事件 ID 来避免冲突。

设计自定义控件模式

控件模式是一个接口,其中包含属性、方法和事件,用于定义自动化元素中可用的离散功能片段。 控件模式方法允许 UI 自动化客户端作控件的特定方面。 控件模式属性和事件提供有关控件的某些方面的信息,并提供有关实现控件模式的自动化元素的状态的信息。

自定义控件模式应遵循以下设计准则:

  • 自定义控件模式应涵盖特定方案。 例如,ItemContainer 控件模式用于查询包含的对象,而不考虑虚拟化状态,但它不枚举或计数包含的对象。
  • 自定义控件模式不应与现有控件模式的功能重叠。 例如,不应将 InvokeExpandCollapse 控件模式组合在一起并呈现为新的控件模式。 重复使用现有控件模式或使用新控件模式定义唯一方案。
  • 可以将多个自定义控件模式设计在一起以支持复杂方案。 例如,SelectionSelectionItem 控件模式协同工作,以支持常规对象选择方案。

自定义控件类型

尽管本主题重点介绍如何注册自定义 UI 自动化属性、事件和控件模式,但也可以引入新的控件类型。 与自定义属性、事件和控件模式不同,自定义控件类型无法在运行时以编程方式注册,因为它实际上只是 UI Automation ControlType 属性的潜在值。 但是,可以定义、发布和发布自定义控件类型 ID,供其他客户端和提供程序使用。 有关控件类型的详细信息,请参阅 UI 自动化控件类型概述

概念

注册自定义属性、事件和控件模式

UI 自动化属性概述

UI 自动化事件概述

UI 自动化控件模式概述