Share via


ItemContainer-Steuerelementmuster

Beschreibt Richtlinien und Konventionen für die Implementierung von IItemContainerProvider, einschließlich Informationen zu Methoden. Das ItemContainer-Steuerelementmuster wird zur Unterstützung der Elementvirtualisierung verwendet.

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

Das folgende Diagramm zeigt beispielsweise ein Listenfeld, das Tausende von virtualisierten Elementen enthält. Da das Steuerelement vollständige Informationen nur für die derzeit sichtbaren untergeordneten Elemente verwaltet, kann der Anbieter Microsoft Benutzeroberflächenautomatisierung-Elemente nur für die Elemente 100 bis 127 verfügbar machen.

Diagramm mit Elementen in einem Listenfeld, die virtualisiert und nicht virtualisiert sind

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

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

Die IVirtualizedItemProvider::Realize-Methode ermöglicht es einem Client, die Realisierung eines virtualisierten Elements anzufordern, wodurch ein vollständiges Benutzeroberflächenautomatisierung Element für das Element verfügbar gemacht wird, sodass alle erforderlichen Eigenschaften und Muster verfügbar sind.

Obwohl der Primäre Zweck des ItemContainer-Steuerelementmusters darin besteht, virtualisierte Containerszenarien zu unterstützen, 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 folgende Abschnitte:

Implementierungsrichtlinien und -konventionen

Beachten Sie beim Implementieren des ItemContainer-Steuerelementmusters die folgenden Richtlinien und Konventionen:

  • Jedes Steuerelement, das virtualisierte Elemente enthalten kann, muss das ItemContainer-Steuerelementmuster unterstützen. Jeder Container, der das Abrufen von Elementen basierend auf einem Eigenschaftswert unterstützt, kann dieses Muster unabhängig davon unterstützen, ob der Container Virtualisierung verwendet.
  • Wenn ein Container virtualisiert wird, können andere Steuerelementmuster wie Auswahl, Tabelle und Raster betroffen sein. Beispielsweise unterstützt die ISelectionProvider::GetSelection-Methode möglicherweise nur Elemente, die sich im Viewport befinden, oder nur ausgewählte Elemente, die derzeit nicht virtualisiert sind.
  • Das Scroll-Steuerelementmuster 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 ItemStatus-Eigenschaft verwenden, um diese Informationen bei Bedarf bereitzustellen.
  • Steuerungsentwickler sollten Details zu allen Benutzeroberflächenautomatisierung Eigenschaften und Steuerelementmustern dokumentieren und veröffentlichen, die von der Verwendung der Virtualisierung betroffen sind. Obwohl die Steuerelementmuster ItemContainer und VirtualizedItem grundlegende Unterstützung bieten, unterstützen sie möglicherweise einige Virtualisierungsverhalten nicht.

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

  • Obwohl nicht erforderlich, empfiehlt Microsoft dringend, dass FindItemByProperty die Eigenschaften Name, AutomationId und IsSelected unterstützt.
  • FindItemByProperty kann langsam sein, wenn mehrere Objekte durchlaufen werden müssen, um ein übereinstimmende Zu finden.
  • FindItemByProperty kann wiederholt aufgerufen werden, um Elemente nacheinander zu suchen. Die Elemente können in beliebiger Reihenfolge ausgeführt werden, 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ächenautomatisierung-Struktur angezeigt werden. Elemente, die nur in der Rohansicht 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 mit einem virtualisierten Element übereinstimmen, 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 Benutzeroberflächenä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 mit einem nicht virtualisierten Element übereinstimmen, muss der Anbieter das tatsächliche Element und keinen Platzhalter zurückgeben.
  • Wenn kein Element gefunden wird, sollte IItemContainerProvider::FindItemByProperty den pFound-Parameter auf NULL festlegen und S_OK zurückgeben.
  • Wenn der propertyId-Parameter 0 ist, sollte der Anbieter das nächste Element nach pStartAfter zurückgeben.
  • Wenn der pStartAfter-ParameterNULL und propertyId 0 ist, sollte der Anbieter das erste Element im Container zurückgeben.
  • Wenn der propertyId-Parameter 0 ist, wird der value-Parameter ignoriert.

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

  • Obwohl Anbieter empfohlen werden, weitere Eigenschaften und Steuerelementmuster für ein Platzhalterelement zu unterstützen, ist nur das VirtualizedItem-Steuerelementmuster erforderlich.
  • Der Anbieter kann ein vorheriges Platzhalterelement ungültig machen, wenn IItemContainerProvider::FindItemByProperty erneut aufgerufen wird. (Wenn ein Client das Platzhalterelement realisieren muss, sollte er dies sofort tun. Andernfalls kann das Element ungültig werden, wenn FindItemByProperty erneut aufgerufen wird oder wenn sich der Viewport aus irgendeinem Grund ändert.)
  • Benutzeroberflächenaktionen wie Scrollen oder Ändern der Größe können dazu führen, dass sich der Viewport des Containers ändert und ein neuer Satz untergeordneter Elemente sichtbar wird. In diesem Fall sind zuvor abgerufene Platzhalterelemente möglicherweise nicht in der Benutzeroberflächenautomatisierung-Struktur verfügbar.
  • Der Anbieter sollte keine UI-Elemente virtualisieren, die auf dem Bildschirm im Viewport des Containerobjekts verfügbar sind.

Erforderliche Elemente für IItemContainerProvider

Die folgende Methode ist erforderlich, um die IItemContainerProvider-Schnittstelle zu implementieren.

Erforderliche Member Memberart Hinweise
FindItemByProperty Methode Keine

 

Dem ItemContainer-Steuerelementmuster sind keine Eigenschaften oder Ereignisse zugeordnet.

Steuerelementtypen und deren unterstützte Steuerelementmuster

Übersicht über Steuerelementmuster für Benutzeroberflächenautomatisierung

Übersicht über die Benutzeroberflächenautomatisierungs-Struktur

VirtualizedItem-Steuerelementmuster