设计自定义属性、事件和控件模式
自定义属性、事件或控件模式的设计在各种控件实现中应很有用。 应避免仅在有限的方案中使用的控制或特定于应用程序的设计。 设计应遵循现有Microsoft UI 自动化属性、事件和控件模式的示例,这些模式经过精心指定,以满足各种辅助功能和自动化测试应用程序的需求。
实现自定义属性、事件或控制模式的规范涉及客户端和提供商双方的合作和协议,并且要求双方一致地实现规范。 鼓励公司与行业组织(如 辅助功能互作性联盟(AIA) 合作,设计并发布自定义属性、事件或控制模式的规范。 通过这种方式,可以达成共识,并可以确保与各种应用程序之间的互作性。
本主题包含以下部分:
何时使用自定义属性和事件
在创建自定义属性、事件或控件模式之前,请确保 UI 自动化不提供现有解决方案。 例如,创建自定义“单击”控件模式并不是必需的,因为 调用 控件模式已经描述了该功能。
如果确定需要自定义属性、事件或控件模式,请确保它不太模糊或泛型。 例如,名为“Show”的控件模式没有用处,因为控件的可见性可以通过元素上的可用性属性(如 UIA_IsExpandCollapsePatternAvailablePropertyId 或 UIA_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 控件模式用于查询包含的对象,而不考虑虚拟化状态,但它不枚举或计数包含的对象。
- 自定义控件模式不应与现有控件模式的功能重叠。 例如,不应将 Invoke 和 ExpandCollapse 控件模式组合在一起并呈现为新的控件模式。 重复使用现有控件模式或使用新控件模式定义唯一方案。
- 可以将多个自定义控件模式设计在一起以支持复杂方案。 例如,Selection 和 SelectionItem 控件模式协同工作,以支持常规对象选择方案。
自定义控件类型
尽管本主题重点介绍如何注册自定义 UI 自动化属性、事件和控件模式,但也可以引入新的控件类型。 与自定义属性、事件和控件模式不同,自定义控件类型无法在运行时以编程方式注册,因为它实际上只是 UI Automation ControlType 属性的潜在值。 但是,可以定义、发布和发布自定义控件类型 ID,供其他客户端和提供程序使用。 有关控件类型的详细信息,请参阅 UI 自动化控件类型概述。
相关主题