使用虚拟化项

本主题介绍了如何使用 ItemContainerVirtualizedItem 控件模式提供的功能来查找和检索有关虚拟化项的信息。

虚拟化概述

包含大量子项的控件可以使用虚拟化来有效地管理项。 通过虚拟化,控件在任何给定时间仅在内存中保留部分项的完整信息。 通常,子集仅包含用户当前可见的那些项。 有关其余虚拟化项的完整信息将保留在存储中,并加载到内存中,或在控件需要它时实现,例如,当新项目对用户可见时。

使用虚拟化的控件表示一项挑战,因为只有实现的项在 UI 自动化树中被完全提供为 Microsoft UI 自动化元素。 虚拟化项在树中不存在,因此客户端不能使用这些项的相关信息。 若要检索有关虚拟化项的信息,客户端需要通过一种方式强制 UI 自动化传递请求以实现控件的项。 实现这些项后,UI 自动化可以为它们创建 UI 自动化元素。 UI 自动化包括两个控件模式,使客户端能够使用虚拟化项: ItemContainerVirtualizedItem

控件如何支持虚拟化

任何可包含虚拟化项的控件都必须支持 ItemContainer 控件模式。 此外,可以虚拟化的任何项都必须支持 VirtualizedItem 控件模式。 ItemContainer 和 VirtualizedItem 控件模式公开的功能可通过 IUIAutomationItemContainerPatternIUIAutomationVirtualizedItemPattern 接口通过客户端进行访问。

客户端如何查找并实现虚拟化项

客户端可以使用 IUIAutomationItemContainerPattern:: FindItemByProperty 方法根据特定属性的值在容器中搜索子项目。 方法还可以检索容器中的第一项或指定项之后的项。 如果找到了匹配的子项,则 FindItemByProperty 检索项的 IUIAutomationElement 接口。 但是,如果子项是虚拟化的,则 IUIAutomationElement 接口是占位符。 当客户端尝试使用 IUIAutomationElement 接口检索属性值或调用尚不可用的方法时,将发生 UIA _ E _ ELEMENTNOTAVAILABLE错误。 通过占位符提供的属性或方法取决于控件实现。 占位符的唯一要求是支持 IUIAutomationVirtualizedItemPattern 接口。

UIA _ E _ ELEMENTNOTAVAILABLE错误是对客户端的指示,表示项可能会被虚拟化。 客户端应通过以下方法进行响应:检索项的 IUIAutomationVirtualizedItemPattern 接口,然后通过调用 IUIAutomationVirtualizedItemPattern:: 方法来实现该项。 如果成功, IUIAutomationElement 接口将完全正常运行,并提供所有适当的属性。

根据控件实现,调用 IUIAutomationVirtualizedItemPattern:: 可能导致控件将项滚动到视图中。 但是,客户端不应依赖于项滚动到视图或使其可见。 若要确保该项可见,客户端可以使用 IUIAutomationScrollItemPattern:: ScrollIntoView 方法。

示例

有关演示如何使用 UI 自动化对虚拟化的支持的示例代码,请参阅 如何检索虚拟化项

UI 自动化控件模式概述