Freigeben über


ItemContainer-Steuerelementmuster

Beschreibt Richtlinien und Konventionen für die Implementierung von IItemContainerProvider-, einschließlich Informationen zu Methoden. Das ItemContainer- Steuerelementmusters wird verwendet, um die Elementvirtualisierung zu unterstützen.

Steuerelemente, die eine große Anzahl untergeordneter Elemente enthalten, können die Virtualisierung verwenden, um die Elemente effizient zu verwalten. Mit der Virtualisierung behält das Steuerelement jederzeit vollständige Informationen im Arbeitsspeicher für eine Teilmenge von Elementen bei. In der Regel enthält die Teilmenge nur die Elemente, die für den Benutzer aktuell sichtbar sind. Vollständige Informationen zu den verbleibenden virtualisierten Elementen werden im Speicher gespeichert und in den Speicher geladen oder realisiert, da das Steuerelement es benötigt, z. B. wenn neue Elemente für den Benutzer sichtbar werden.

Das folgende Diagramm zeigt z. B. ein Listenfeld mit Tausenden virtualisierter Elemente. Da das Steuerelement vollständige Informationen nur für die derzeit sichtbaren untergeordneten Elemente verwaltet, kann der Anbieter Microsoft-Benutzeroberflächenautomatisierungs-Elemente nur für Elemente 100 –127 verfügbar machen.

Diagramm mit Elementen in einem Listenfeld, das virtualisiert und nicht virtualisiert

Steuerelemente, die Virtualisierung verwenden, stellen eine Herausforderung dar, da nur realisierte (nicht virtualisierte) Elemente als Benutzeroberflächenautomatisierungs-Elemente in der Benutzeroberflächenautomatisierungs-Struktur vollständig verfügbar sind. Virtualisierte Elemente sind in der Struktur nicht vorhanden, daher sind keine Informationen zu ihnen verfügbar.

Um Informationen zu virtualisierten Elementen bereitzustellen, implementieren Anbieter das ItemContainer- Steuerelementmuster, das die IItemContainerProvider Schnittstelle verfügbar macht. Die FindItemByProperty -Methode findet untergeordnete Elemente basierend auf dem Wert einer bestimmten Eigenschaft, z. B. Name, AutomationIdoder IsSelected. Wenn ein Element virtualisiert ist, ruft FindItemByProperty ein Benutzeroberflächenautomatisierungs-Platzhalterelement für das Element ab. Ein Platzhalterelement ist eine Implementierung der IRawElementProviderSimple Schnittstelle, die nur das VirtualizedItem- Steuerelementmuster unterstützt.

Mit der IVirtualizedItemProvider::Realize-Methode kann ein Client anfordern, dass ein virtualisiertes Element realisiert wird, wodurch ein vollständiges Benutzeroberflächenautomatisierungs-Element für das Element verfügbar ist, sodass alle erforderlichen Eigenschaften und Muster verfügbar sind.

Obwohl der Hauptzweck des ItemContainer- Steuerelementmusters die Unterstützung virtualisierter Containerszenarien ist, kann es von jedem Container implementiert werden, der untergeordnete Elemente anhand des Namens abruft, unabhängig davon, ob der Container Virtualisierung verwendet.

Dieses Thema enthält die folgenden Abschnitte.

Implementierungsrichtlinien und -konventionen

Beachten Sie bei der Implementierung des ItemContainer- Steuerelementmusters die folgenden Richtlinien und Konventionen:

  • Jedes Steuerelement, das virtualisierte Elemente enthalten kann, muss das ItemContainer- Steuerelementmuster unterstützen. Jeder Container, der den Abruf von Elementen basierend auf einem Eigenschaftswert unterstützt, kann dieses Muster unterstützen, unabhängig davon, ob der Container Virtualisierung verwendet.
  • Wenn ein Container virtualisiert wird, können andere Steuerelementmuster wie Selection, Tableund Grid betroffen sein. Die ISelectionProvider::GetSelection-Methode unterstützt beispielsweise nur Elemente, die sich im Viewport befinden, oder nur ausgewählte Elemente, die derzeit nicht virtualisiert sind.
  • Das Scroll- Steuerelementmusters sollte von der Virtualisierung nicht betroffen sein.
  • Für virtualisierte Elemente sind keine Elementanzahl- oder Indexinformationen verfügbar. Ein virtualisiertes Steuerelement kann die DescribedBy oder die ItemStatus-eigenschaft verwenden, um diese Informationen bei Bedarf bereitzustellen.
  • Steuerelemententwickler sollten Details aller Benutzeroberflächenautomatisierungseigenschaften und Steuerelementmuster dokumentieren und veröffentlichen, die von der Verwendung der Virtualisierung betroffen sind. Obwohl das ItemContainer- und VirtualizedItem- Steuerelementmuster grundlegende Unterstützung bieten, unterstützen sie möglicherweise einige Virtualisierungsverhaltensweisen nicht.

Die folgenden Richtlinien und Anforderungen gelten für die IItemContainerProvider::FindItemByProperty--Methode.

  • Microsoft empfiehlt zwar dringend, dass FindItemByProperty die eigenschaften Name, AutomationIdund IsSelected unterstützen.
  • FindItemByProperty kann langsam sein, wenn mehrere Objekte durchquert werden müssen, um einen übereinstimmenden zu finden.
  • FindItemByProperty- kann wiederholt aufgerufen werden, um Elemente in Sequenz zu finden. Die Elemente können in beliebiger Reihenfolge sein, solange jedes Element nur einmal zurückgegeben wird.
  • FindItemByProperty kann implementiert werden, um nur die Elemente zu finden, die in der Steuerelement- oder Inhaltsansicht der Benutzeroberflächenautomatisierungs-Struktur angezeigt werden. Elemente, die nur in der unformatierten Ansicht angezeigt werden, können übersprungen werden, um zu vermeiden, dass mehrere Elemente abgerufen werden, die nur einen Teil eines "Elements" für den Benutzer darstellen.
  • Wenn die Suchkriterien einem virtualisierten Element entsprechen, kann der Anbieter ein Platzhalterelement zurückgeben, das das VirtualizedItem- Steuerelementmuster unterstützt. Die folgenden Richtlinien gelten für Platzhalterelemente:
    • Das Abrufen eines Platzhalterelements für ein virtualisiertes Element darf keine UI-Änderungen verursachen.
    • Das Platzhalterelement muss ein Peer anderer untergeordneter Elemente sein (ein Strukturänderungsereignis ist erforderlich).
    • Wenn möglich, kann der Anbieter anstelle eines Platzhalters ein vollständiges Automatisierungselement erstellen.
  • Wenn die Suchkriterien einem nicht virtualisierten Element entsprechen, muss der Anbieter das tatsächliche Element und nicht einen Platzhalter zurückgeben.
  • Wenn kein Element gefunden wird, sollte IItemContainerProvider::FindItemByProperty- den parameter pFound auf NULL- festlegen und S_OKzurückgeben.
  • Wenn der parameter propertyId 0 ist, sollte der Anbieter das nächste Element nach pStartAfter-zurückgeben.
  • Wenn der parameter pStartAfterNULL ist und propertyId 0 ist, sollte der Anbieter das erste Element im Container zurückgeben.
  • Wenn der parameter propertyId 0 ist, wird der Wertparameter ignoriert.

Die folgenden Richtlinien und Anforderungen gelten für Platzhalterelemente für virtualisierte Elemente in der Benutzeroberflächenautomatisierungs-Struktur.

  • Obwohl Anbieter ermutigt werden, weitere Eigenschaften und Steuerelementmuster für ein Platzhalterelement zu unterstützen, ist nur das VirtualizedItem- Steuerelementmusters erforderlich.
  • Der Anbieter kann ein vorheriges Platzhalterelement ungültig, wenn IItemContainerProvider::FindItemByProperty erneut aufgerufen wird. (Wenn ein Client das Platzhalterelement erkennen muss, sollte es sofort ausgeführt werden. Andernfalls kann das Element ungültig werden, wenn FindItemByProperty erneut aufgerufen wird oder wenn sich der Viewport aus irgendeinem Grund ändert.)
  • Ui-Aktionen wie Scrollen oder Ändern der Größe können dazu führen, dass sich der Viewport des Containers ändert und eine neue Gruppe von untergeordneten Elementen sichtbar wird. In diesem Fall sind zuvor abgerufene Platzhalterelemente möglicherweise nicht in der Benutzeroberflächenautomatisierungs-Struktur verfügbar.
  • Der Anbieter sollte keine UI-Elemente virtualisieren, die im Viewport des Containerobjekts auf dem Bildschirm verfügbar sind.

Erforderliche Elemente für IItemContainerProvider

Die folgende Methode ist für die Implementierung der IItemContainerProvider Schnittstelle erforderlich.

Erforderliche Mitglieder Elementtyp Notizen
FindItemByProperty Methode Nichts

 

Das ItemContainer- Steuerelementmusters weist keine zugeordneten Eigenschaften oder Ereignisse auf.

Steuerelementtypen und deren unterstützte Steuerelementmuster

Übersicht über Steuerelementmuster für die Benutzeroberflächenautomatisierung

übersicht über Benutzeroberflächenautomatisierungsstruktur

VirtualizedItem-Steuerelementmuster