Поделиться через


Запрос виртуализированного элемента в представлении элементов

В этом разделе описывается использование Microsoft модель автоматизации пользовательского интерфейса для получения сведений о пользовательском интерфейсе о виртуализированных элементах в представлении элементов Windows 7. Этот раздел включает следующие подразделы:

Примечание

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

 

Общие сведения

Представление элементов — это компонент пользовательского интерфейса, который позволяет пользователям просматривать файлы и другие элементы и взаимодействовать с ними. В Windows 7 представление элементов заменяет элемент управления представлением списка для представления элементов в представлении windows Обозреватель по умолчанию. Представление элементов также используется в диалоговом окне общих элементов, результатах поиска в меню "Пуск" и других элементах пользовательского интерфейса Windows 7, использующих элемент управления Обозреватель Browser. По сравнению с элементом управления list-view представление элементов предоставляет пользователям следующие преимущества:

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

На следующем рисунке показано представление элементов в Windows Обозреватель.

Снимок экрана: проводник с компонентом представления элементов

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

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

Структура дерева представления элементов

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

Элементы группы — это модель автоматизации пользовательского интерфейса элементы, содержащие все элементы списка этой группы. Их тип элемента управления — "Группа", и их имена зависят от имени группы. На предыдущем изображении первый элемент группы содержит заголовок "A-H (1)" и элемент списка "Папка" с именем "A-H".

Элементы списка — это модель автоматизации пользовательского интерфейса элементы, представляющие конечные элементы в представлении. Их тип элемента управления — ListItem, и их имена зависят от имени элемента. На предыдущем изображении элементы списка являются конечными элементами, такими как "Folder", "Music" и "Picture". Эти три модель автоматизации пользовательского интерфейса элемента называются терминами ItemsView element, Group element и ListItem element в оставшейся части этого документа.

Виртуализация

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

Представление элементов поддерживает возможность извлечения следующих сведений о виртуализированных элементах:

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

Получение числа всех элементов

Клиент может использовать элемент ItemsView для получения количества всех элементов, а также количества выбранных элементов. Элемент ItemsView предоставляет два способа получения этих счетчиков. Первый — получение свойства ItemStatus элемента ItemsView, а второй — получение пользовательских свойств из элемента ItemsView.

Свойство ItemStatus — это строка, указывающая общее количество элементов и количество выбранных элементов, разделенных запятой. Например: "3 элемента, 1 элемент выбран". Эта строка локализована и может быть передана непосредственно пользователю.

Настраиваемые свойства элемента ItemsView включают одно свойство для счетчика элементов, а другое — для количества выделенных элементов. В их число входят следующие:

  • ItemCount_Property_GUID (ABBF5C45-5CCC-47b7-BB4E-87CB87BBD162) — количество всех уникальных элементов в представлении. Если сгруппировано по свойству с несколькими значениями (MVP), чтобы один элемент отображался несколько раз, каждый элемент подсчитывается только один раз.

    (UIAutomationType: UIAutomationType_Int, программное имя: "ItemCount")

  • SelectedItemCount_Property_GUID (92A053DA-2969-4021-BF27-514CFC2E4A69) — количество всех уникальных элементов, выбранных в представлении. Если сгруппировано по свойству с несколькими значениями (MVP), чтобы один элемент отображался несколько раз, каждый элемент подсчитывается только один раз.

    (UIAutomationType: UIAutomationType_Int, программное имя: "SelectedItemCount")

Эти настраиваемые свойства определяются в файле Shlguid.h, который входит в пакет sdk для Windows, и эти свойства регистрируются с помощью метода IUIAutomationRegistrar::RegisterProperty . модель автоматизации пользовательского интерфейса клиенты используют RegisterProperty для получения идентификаторов свойств (PROPERTYID) для пользовательских свойств.

Получение индекса элемента относительно всех элементов

Клиент может получить индекс элемента путем получения свойства ItemStatus элемента ListItem или путем получения настраиваемого свойства элемента ListItem.

Свойство ItemStatus — это строка, содержащая индекс элемента относительно общего количества элементов. Например, "элемент 1 из 3". Эта строка локализована и может быть передана непосредственно пользователю.

Следующее настраиваемое свойство получает индекс элемента элемента ListItem:

  • ItemIndex_Property_GUID (92A053DA-2969-4021-BF27-514CFC2E4A69) — абсолютный индекс элемента на основе 1. При группировке по свойству с несколькими значениями (MVP) так, что один элемент может отображаться дважды, каждый внешний вид элемента получает отдельный индекс.

    (UIAutomationType: UIAutomationType_Int, имя программы: "ItemIndex")

Это настраиваемое свойство определяется в файле Shlguid.h, который входит в windows SDK, и регистрируется с помощью метода IUIAutomationRegistrar::RegisterProperty . модель автоматизации пользовательского интерфейса клиенты используют RegisterProperty для получения идентификатора свойства (PROPERTYID) для настраиваемого свойства.

Получение ссылки на витуализированный элемент

Элемент ItemsView реализует шаблон элемента управления ItemContainer (интерфейс IItemContainerProvider), который позволяет клиенту получить модель автоматизации пользовательского интерфейса элемент для виртуализированного элемента (элемента, который находится за пределами видимой области). ItemsView позволяет клиенту найти элемент ListItem, выполнив поиск по свойствам Name и Selection. Попытка поиска по любому другому свойству завершится ошибкой.

Виртуальный элемент реализует только шаблон элемента управления VirtualizedItem (интерфейс IVirtualizedItemProvider ). Поскольку элемент, представленный виртуализированным элементом модель автоматизации пользовательского интерфейса, еще не существует, попытка получить любой другой шаблон или свойство элемента завершится ошибкой.

Элементы ListItem и Group виртуализированы, но из шаблона элемента управления ItemContainer можно возвращать только элементы ListItem. Так как вызов метода IUIAutomationItemContainerPattern::FindItemByProperty выполняется в потоке пользовательского интерфейса и блокируется, представление не будет отвечать, пока не будет возвращено свойство FindItemByProperty , а любые другие вызовы методов поставщика должны ждать завершения FindItemByProperty . В некоторых случаях FindItemByProperty должен обработать весь набор данных перед возвратом, что может быть ресурсоемким. Указание NULL в качестве начального элемента приводит к тому, что FindItemByProperty начинает поиск с первого элемента в представлении.

ItemsView поддерживает следующие свойства для FindItemByProperty:

  • Name (UIA_NamePropertyId) — выполняет поиск первого элемента, имя которого полностью соответствует указанной строке. Поиск не учитывает регистр символов. Подстановочные знаки или частичное сопоставление не поддерживается. Если указано null-имя , возвращается следующий элемент после начального элемента. Указание имен NULL позволяет клиенту модель автоматизации пользовательского интерфейса перечислять все элементы в представлении, однако перечисление всех элементов не рекомендуется, так как это приводит к тому, что все элементы в представлении будут реализованы.
  • SelectionItem_IsSelected (UIA_SelectionItemIsSelectedPropertyId) — выполняет поиск первого элемента, свойство SelectionItem_IsSelected которого соответствует указанному значению. Укажите ЗНАЧЕНИЕ TRUE , чтобы найти первый выбранный элемент, или FALSE , чтобы найти первый не выбранный элемент. Будьте внимательны при перечислении всех выбранных элементов, так как количество выбранных элементов может быть очень большим, особенно если пользователь выбрал все элементы.

Прокрутка виртуализированного элемента на экране

Получив ссылку на элемент модель автоматизации пользовательского интерфейса для виртуализированного элемента (вне экрана), клиент может прокрутить элемент в представление с помощью метода IUIAutomationVirtualizeItemPattern::Realize шаблона элемента управления VirtualizedItem. После реализации элемента он становится видимым, а все свойства и шаблоны элементов управления, обычно связанные с элементом ListItem, становятся доступны клиенту.

Только элементы ListItem, полученные методом IUIAutomationItemContainerPattern::FindItemByProperty , предоставляют шаблон элемента управления VirtualizedItem . Если экранный элемент прокручивается за экран, он становится недопустимым, и клиент должен вызвать FindItemByProperty , чтобы получить ссылку вне экрана.

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

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