Работа с виртуализированными элементами
В этом разделе описывается, как использовать функциональные возможности, предоставляемые itemContainer и шаблонами элементов управления VirtualizedItem для поиска и получения сведений о виртуализированных элементах.
- Обзор виртуализации
- Как элемент управления поддерживает виртуализацию
- как клиенты находят и реализуют виртуализированные элементы
- Пример
- Связанные темы
Обзор виртуализации
Элементы управления, содержащие большое количество дочерних элементов, могут использовать виртуализацию для эффективного управления элементами. При виртуализации элемент управления сохраняет полную информацию в памяти только для подмножества элементов в любое время. Как правило, подмножество включает только те элементы, которые в настоящее время видны пользователю. Полная информация о оставшихся виртуализированных элементах хранится в хранилище и загружается в память или реализуется, так как элемент управления нуждается в нем, например, когда новые элементы становятся видимыми для пользователя.
Элементы управления, использующие виртуализацию, представляют собой проблему, так как в дереве автоматизации пользовательского интерфейса Майкрософт полностью доступны только те элементы, которые реализованы в виде элементов автоматизации пользовательского интерфейса Майкрософт. Виртуализированные элементы не существуют в дереве, поэтому сведения о них недоступны для клиентов. Чтобы получить информацию о виртуализированных элементах, клиентам необходимо иметь способ, при котором автоматизация пользовательского интерфейса принудительно передает запрос на реализацию элементов в элемент управления. После реализации элементов автоматизация пользовательского интерфейса может создавать элементы автоматизации пользовательского интерфейса для них. Автоматизация пользовательского интерфейса включает два шаблона управления, чтобы клиенты могли работать с виртуализированными элементами: 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.
Пример
Пример кода, показывающий, как использовать поддержку автоматизации пользовательского интерфейса для виртуализации, см. в разделе Получение виртуализированного элемента.
Связанные разделы