Udostępnij za pośrednictwem


Jak wykonywać zapytania dotyczące elementu zwirtualizowanego w widoku elementów

W tym temacie opisano sposób używania automatyzacji interfejsu użytkownika firmy Microsoft do pobierania informacji o elementach zwirtualizowanych w widoku elementów systemu Windows 7. Ten temat zawiera następujące sekcje.

Uwaga

Ten temat dotyczy tylko systemu Windows 7. Należy pamiętać, że funkcje ułatwień dostępu opisane w tym temacie mogą ulec zmianie w przyszłych wersjach systemu Windows.

 

Przegląd

Widok elementów to składnik interfejsu użytkownika, który umożliwia użytkownikom wyświetlanie plików i innych elementów oraz interakcję z nimi. W systemie Windows 7 widok elementów zastępuje kontrolkę widoku listy do prezentowania elementów w widoku domyślnym Eksploratora Windows. Widok elementów jest również używany we wspólnym oknie dialogowym elementów, wynikach wyszukiwania menu Start i innych elementach interfejsu użytkownika systemu Windows 7 korzystających z kontrolki przeglądarki Eksploratora. W porównaniu z kontrolką widoku listy, widok elementów oferuje użytkownikom następujące korzyści:

  • Widok elementów może przedstawiać elementy w sposób, który jest bardziej przydatny, pożądany i odpowiedni, co umożliwia użytkownikom znajdowanie i organizowanie elementów w prosty, szybki i przyjemny sposób.
  • Widok elementów może wyświetlać duże zestawy elementów ze źródeł danych o różnych cechach wydajności, umożliwiając użytkownikom przeglądanie i przeszukiwanie całej kolekcji elementów w wielu źródłach.

Na poniższej ilustracji przedstawiono widok elementów w Eksploratorze Windows.

zrzut ekranu przedstawiający Eksploratora Windows z komponentem widoku elementów

Z perspektywy dewelopera ogólna struktura i funkcjonalność widoku elementów jest podobna do tej kontrolki widoku listy. Główną różnicą jest to, że widok elementów obsługuje wirtualizację, natomiast kontrolka widoku listy nie jest obsługiwana. Ponadto widok elementów używa dwóch nowych interfejsów automatyzacji interfejsu użytkownika w celu zapewnienia dostępności zwirtualizowanej zawartości udostępnianej przez widok elementów. Te interfejsy opisano w poniższych sekcjach tego tematu.

Aby uzyskać ogólne informacje na temat wirtualizacji w usłudze Automatyzacja interfejsu użytkownika, zobacz Praca z elementami zwirtualizowanymi.

Struktura drzewa widoku elementów

W drzewie automatyzacji interfejsu użytkownika element automatyzacji interfejsu użytkownika najwyższego poziomu widoku elementów ma nazwę "ItemsView" i typ kontrolki "list". Na poprzedniej ilustracji element Automatyzacji Interfejsu Użytkownika ItemsView jest zaznaczony na czerwono. Różne elementy automatyzacji interfejsu użytkownika istnieją poniżej najwyższego poziomu elementu ItemsView, ale w tym dokumencie odwołuje się do tylko dwóch innych elementów automatyzacji interfejsu użytkownika: elementy grupowe i elementy listowe.

Elementy grupy to elementy automatyzacji interfejsu użytkownika, które zawierają wszystkie elementy listy tej grupy — ich typ sterowania to "Grupa", a ich nazwy różnią się w zależności od nazwy grupy. Na poprzedniej ilustracji pierwszy element grupy zawiera zarówno nagłówek "A-H (1)", jak i element listy "Folder", a jego nazwa to "A-H".

Elementy listy to elementy automatyzacji interfejsu użytkownika, które reprezentują elementy liścia w widoku — ich typ kontrolki to "ListItem", a ich nazwy różnią się w zależności od nazwy elementu. Na poprzedniej ilustracji elementy listy to elementy liścia, takie jak "Folder", "Muzyka" i "Obraz". Te trzy elementy automatyzacji interfejsu użytkownika są określane przez terminy ItemsView element, Group element i ListItem w pozostałej części tego dokumentu.

Wirtualizacja

Widok elementów korzysta z wirtualizacji, co oznacza, że elementy spoza widocznego obszaru widoku nie są pobierane z systemu, a reprezentacja interfejsu użytkownika nie jest tworzona. Te elementy są nazywane elementami zwirtualizowanymi . Ponieważ nie są tworzone, zwirtualizowane elementy nie mają elementów automatyzacji interfejsu użytkownika i dlatego nie są wyświetlane w drzewie automatyzacji interfejsu użytkownika, gdy klient automatyzacji interfejsu użytkownika wylicza drzewo. Ponadto wzorce kontrolne automatyzacji interfejsu użytkownika działają tylko na widocznych elementach. Na przykład wzorzec kontrolki wybór zwraca tylko widoczne wybrane elementy, gdy klient wywołuje metodę IUIAutomationSelectionPattern::GetCurrentSelection.

Widok elementów obsługuje możliwość pobierania następujących informacji o elementach zwirtualizowanych:

  • Liczba całkowitej liczby elementów, w tym elementów zwirtualizowanych
  • Elementy automatyzacji interfejsu użytkownika dla elementów zwirtualizowanych
  • Elementy automatyzacji interfejsu użytkownika dla elementów zwirtualizowanych, które są zaznaczone

Uzyskiwanie liczby wszystkich elementów

Klient może użyć elementu ItemsView, aby uzyskać liczbę wszystkich elementów, a także liczbę wybranych elementów. Element ItemsView udostępnia dwa sposoby pobierania tych liczb. Pierwszy z nich polega na uzyskaniu właściwości ItemStatus elementu ItemsView, a druga polega na pobieraniu właściwości niestandardowych z elementu ItemsView.

Właściwość ItemStatus jest ciągiem, który określa liczbę całkowitej liczby elementów i liczbę wybranych elementów rozdzielonych przecinkami. Na przykład: "3 elementy, 1 wybrany element". Ten ciąg jest zlokalizowany i może być przekazywany bezpośrednio użytkownikowi.

Właściwości niestandardowe elementu ItemsView obejmują jedną właściwość dla liczby elementów, a drugą dla liczby zaznaczeń. Obejmują one:

  • ItemCount_Property_GUID (ABBF5C45-5CCC-47b7-BB4E-87CB87BBD162) — liczba wszystkich unikatowych elementów w widoku. Jeśli pogrupowane według właściwości wielowartościowej (MVP), tak aby pojedynczy element mógł być wyświetlany wiele razy, każdy element jest liczony tylko raz.

    (UIAutomationType: UIAutomationType_Int, nazwa programowa: "ItemCount")

  • SelectedItemCount_Property_GUID (92A053DA-2969-4021-BF27-514CFC2E4A69) — liczba wszystkich unikatowych elementów wybranych w widoku. Jeśli elementy są pogrupowano według właściwości wielowartościowej (MVP), tak aby pojedynczy element mógł być wyświetlany wiele razy, każdy element jest liczony tylko raz.

    (UIAutomationType: UIAutomationType_Int, nazwa programowa: "LiczbaWybranychElementów")

Te właściwości niestandardowe są definiowane w pliku Shlguid.h, który znajduje się w zestawie Sdk (Software Development Kit) systemu Windows, a te właściwości są rejestrowane za pośrednictwem metody IUIAutomationRegistrar::RegisterProperty. Klienci automatyzacji interfejsu użytkownika używają RegisterProperty do pobierania identyfikatorów właściwości (PROPERTYID) dla właściwości niestandardowych.

Uzyskiwanie indeksu elementów w odniesieniu do wszystkich elementów

Klient może uzyskać indeks elementu, uzyskując właściwość ItemStatus elementu ListItem lub uzyskując właściwość niestandardową elementu ListItem.

Właściwość ItemStatus jest ciągiem zawierającym indeks elementu w odniesieniu do całkowitej liczby elementów. Na przykład: "element 1 z 3". Ten ciąg jest zlokalizowany i może być przekazywany bezpośrednio użytkownikowi.

Następująca właściwość niestandardowa pobiera indeks elementu ListItem:

  • ItemIndex_Property_GUID (92A053DA-2969-4021-BF27-514CFC2E4A69) — 1-bazowy indeks bezwzględny elementu. Jeśli pogrupowane według właściwości wielowartościowej (MVP), aby pojedynczy element mógł pojawić się więcej niż raz, każde wystąpienie elementu otrzymuje oddzielny indeks.

    (UIAutomationType: UIAutomationType_Int, nazwa programowa: "ItemIndex")

Ta właściwość niestandardowa jest definiowana w pliku Shlguid.h, który jest zawarty w zestawie Windows SDK i jest rejestrowany za pośrednictwem metody IUIAutomationRegistrar::RegisterProperty. Klienci automatyzacji interfejsu użytkownika używają RegisterProperty, aby uzyskać identyfikator właściwości (PROPERTYIDs) dla niestandardowej właściwości.

Uzyskiwanie odwołania do zwirtualizowanego elementu

Element ItemsView implementuje wzorzec sterowania ItemContainer (interfejsu IItemContainerProvider), który umożliwia klientowi uzyskanie elementu UI Automation dla elementu zwirtualizowanego (elementu znajdującego się poza widocznym obszarem). ItemsView umożliwia klientowi znalezienie elementu ListItem, wyszukując po właściwościach Name i Selection. Próba wyszukania według jakiejkolwiek innej właściwości zakończy się niepowodzeniem.

Element wirtualny implementuje tylko wzorzec kontrolki VirtualizedItem (interfejs IVirtualizedItemProvider). Ponieważ element reprezentowany przez zwirtualizowany element automatyzacji interfejsu użytkownika nie istnieje jeszcze, próba pobrania innego wzorca kontrolki lub właściwości elementu zakończy się niepowodzeniem.

Elementy ListItem i Group są zwirtualizowane, ale za pomocą wzorca kontrolki ItemContainer można zwrócić tylko elementy ListItem. Ponieważ wywołanie metody IUIAutomationItemContainerPattern::FindItemByProperty działa w wątku interfejsu użytkownika i blokuje proces, widok nie odpowie, dopóki FindItemByProperty nie zakończy działania, i wszystkie inne wywołania metod dostawcy muszą czekać, aż FindItemByProperty zakończy się. W niektórych przypadkach FindItemByProperty musi przetworzyć cały zestaw danych przed zwróceniem, co może być intensywnie obciążające zasoby. Określenie NULL jako elementu początkowego powoduje, że FindItemByProperty rozpoczyna wyszukiwanie od pierwszego elementu w widoku.

Element "ItemsView" obsługuje następujące właściwości FindItemByProperty:

  • Nazwa (UIA_NamePropertyId) — wyszukuje pierwszy element, którego nazwa jest w pełni zgodna z określonym ciągiem. Wyszukiwanie nie uwzględnia wielkości liter. Symbole wieloznaczne ani częściowe dopasowywanie nie są obsługiwane. Jeśli zostanie określona null nazwa, zwracany jest następny element po elemencie początkowym. Określanie nazw NULL umożliwia klientowi automatyzacji interfejsu użytkownika wyliczanie wszystkich elementów w widoku; jednak nie zaleca się wyliczania wszystkich elementów, ponieważ powoduje to, że wszystkie elementy w widoku są realizowane.
  • SelectionItem_IsSelected (UIA_SelectionItemIsSelectedPropertyId) — wyszukuje pierwszy element, którego właściwość SelectionItem_IsSelected jest zgodna z określoną wartością. Określ true, aby znaleźć pierwszy wybrany element, lub false, aby znaleźć pierwszy nie zaznaczony element. Podczas wyliczania wszystkich zaznaczonych elementów należy zachować ostrożność, ponieważ liczba wybranych elementów może być bardzo duża, zwłaszcza jeśli użytkownik wybrał wszystkie elementy.

Przewijanie elementu zwirtualizowanego na ekranie

Po uzyskaniu odwołania do elementu automatyzacji interfejsu użytkownika dla elementu zwirtualizowanego (poza ekranem) klient może przewinąć element do widoku przy użyciu wzorca kontrolki IUIAutomationVirtualizeItemPattern::Realizuj metody VirtualizedItem. Po zrealizowaniu elementu jest on widoczny, a wszystkie właściwości i wzorce sterowania zwykle skojarzone z elementem ListItem są dostępne dla klienta.

Tylko elementy ListItem uzyskane przez metodę IUIAutomationItemContainerPattern::FindItemByProperty ujawniają wzorzec kontrolki VirtualizedItem. Gdy element na ekranie jest przewijany poza ekranem, element staje się nieprawidłowy i klient musi wywołać FindItemByProperty, aby pobrać odwołanie poza ekranem.

Można również przenosić elementy do widoku i z powrotem przy użyciu wzorca kontrolki przewijania (lub za pomocą pasków przewijania). Elementy i grupy są aktywowane, gdy przewijają się do widoku, i są dezaktywowane, gdy przewijają się poza widok.

praca z elementami zwirtualizowanymi