Работа с виртуализированными элементами

В этом разделе описывается использование функций, предоставляемых шаблонами элементов управления ItemContainer и VirtualizedItem , для поиска и извлечения сведений о виртуализированных элементах.

Общие сведения о виртуализации

Элементы управления, содержащие большое количество дочерних элементов, могут использовать виртуализацию для эффективного управления элементами. При виртуализации элемент управления сохраняет полную информацию в памяти только для подмножества элементов в любой момент времени. Как правило, подмножество включает только те элементы, которые в настоящее время видны пользователю. Полные сведения об остальных виртуализированных элементах хранятся в хранилище и загружаются в память или реализуются по мере необходимости элемента управления, например по мере того, как новые элементы становятся видимыми для пользователя.

Элементы управления, использующие виртуализацию, представляют собой проблему, так как только реализованные элементы полностью доступны в виде элементов Microsoft модель автоматизации пользовательского интерфейса в дереве модель автоматизации пользовательского интерфейса. Виртуализированные элементы не существуют в дереве, поэтому сведения о них недоступны клиентам. Чтобы получить сведения о виртуализированных элементах, клиентам нужен способ принудительного модель автоматизации пользовательского интерфейса передать запрос на реализацию элементов в элемент управления . После реализации элементов модель автоматизации пользовательского интерфейса могут создавать для них модель автоматизации пользовательского интерфейса элементы. модель автоматизации пользовательского интерфейса включает два шаблона элементов управления, позволяющие клиентам работать с виртуализированными элементами: ItemContainer и VirtualizedItem.

Как элемент управления поддерживает виртуализацию

Любой элемент управления, который может содержать виртуализированные элементы, должен поддерживать шаблон элемента управления ItemContainer . Кроме того, любой элемент, который можно виртуализировать, должен поддерживать шаблон элемента управления VirtualizedItem . Функциональные возможности, предоставляемые шаблонами элементов управления ItemContainer и VirtualizedItem, доступны клиентам через интерфейсы IUIAutomationItemContainerPattern и IUIAutomationVirtualizedItemPattern .

Как клиенты находят и реализуют виртуализированные элементы

Клиенты могут использовать метод IUIAutomationItemContainerPattern::FindItemByProperty для поиска дочерних элементов в контейнере на основе значения определенного свойства. Метод также может получить первый элемент в контейнере или элемент, следующий за указанным элементом. Если найден соответствующий дочерний элемент, FindItemByProperty извлекает интерфейс IUIAutomationElement для элемента. Однако если дочерний элемент виртуализирован, то интерфейс IUIAutomationElement является заполнителем. Ошибка UIA_E_ELEMENTNOTAVAILABLE возникает, когда клиент пытается использовать интерфейс IUIAutomationElement для получения значений свойств или вызова методов, которые еще недоступны. Какие свойства или методы доступны через заполнитель, зависит от реализации элемента управления. Единственное требование для заполнителя — поддержка интерфейса IUIAutomationVirtualizedItemPattern .

Ошибка UIA_E_ELEMENTNOTAVAILABLE указывает клиенту, что элемент может быть виртуализирован. Клиент должен получить интерфейс IUIAutomationVirtualizedItemPattern для элемента, а затем реализовать элемент, вызвав метод IUIAutomationVirtualizedItemPattern::Realize . В случае успеха интерфейс IUIAutomationElement будет полностью функциональным со всеми доступными свойствами.

В зависимости от реализации элемента управления вызов IUIAutomationVirtualizedItemPattern::Realize может привести к прокрутке элемента в представление. Однако клиент не должен полагаться на то, что элемент прокручивается в представление или становится видимым. Чтобы убедиться, что элемент отображается, клиент может использовать метод IUIAutomationScrollItemPattern::ScrollIntoView .

Пример

Пример кода, который показывает, как использовать поддержку модель автоматизации пользовательского интерфейса виртуализации, см. в разделе Получение виртуализированного элемента.

Общие сведения о шаблонах элементов управления модели автоматизации пользовательского интерфейса