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

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

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

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

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

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

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

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

Клиенты могут использовать метод иуиаутоматионитемконтаинерпаттерн:: финдитембипроперти для поиска дочерних элементов в контейнере на основе значения конкретного свойства. Метод также может получить первый элемент в контейнере или элемент, следующий за указанным элементом. Если найден соответствующий дочерний элемент, финдитембипроперти Извлекает интерфейс иуиаутоматионелемент для элемента. Однако если дочерний элемент является виртуализированным, то интерфейс иуиаутоматионелемент является заполнителем. Ошибка UIA _ E _ елементнотаваилабле возникает, когда клиент пытается использовать интерфейс иуиаутоматионелемент для получения значений свойств или вызова методов, которые еще недоступны. Свойства или методы, доступные через заполнитель, зависят от реализации элемента управления. Единственным требованием для заполнителя является поддержка интерфейса иуиаутоматионвиртуализедитемпаттерн .

Ошибка UIA _ E _ елементнотаваилабле — это указание клиенту на то, что элемент может быть виртуализирован. Клиент должен ответить путем получения интерфейса иуиаутоматионвиртуализедитемпаттерн для элемента, а затем реализовать элемент, вызвав метод Иуиаутоматионвиртуализедитемпаттерн:: реализовать . В случае этого интерфейс иуиаутоматионелемент будет полностью функциональным для всех доступных свойств.

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

Пример

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

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