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

В этом разделе описывается использование функциональных возможностей, предоставляемых шаблонами элементов управления 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 .

Пример

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

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