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

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

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

本主题包含以下各节:

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

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

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

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

设计自定义属性

UI 自动化包括两种基本类型的属性:自动化元素属性和控件模式属性。 自动化元素属性由一组常见的属性(如 Name、AcceleratorKey 和 ClassName)组成,这些属性由所有UI 自动化元素公开,而不考虑控件类型。 控件模式属性由控件通过特定的控件模式公开。 每个控件模式都有一组相应的控件模式属性,控件必须公开这些属性。 例如,支持 Grid 控件模式的控件公开 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 定义了多个不同类别的 WinEvents,并为每个类别定义了一个或多个用作 WinEvent ID 的值范围。 有关详细信息,请参阅 WinEvent ID 的分配

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

设计自定义控件模式

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

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

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

自定义控件类型

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

概念性

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

UI 自动化属性概述

UI 自动化事件概述

UI 自动化控件模式概述