Pattern di controllo ItemContainer

Vengono descritte le linee guida e le convenzioni per l'implementazione di IItemContainerProvider, incluse le informazioni sui metodi. Il pattern di controllo ItemContainer viene usato per supportare la virtualizzazione degli elementi.

I controlli che contengono un numero elevato di elementi figlio possono usare la virtualizzazione per gestire in modo efficiente gli elementi. Con la virtualizzazione, il controllo mantiene informazioni complete in memoria solo per un subset di elementi in qualsiasi momento. In genere, il subset include solo gli elementi attualmente visibili all'utente. Le informazioni complete sugli elementi virtualizzati rimanenti vengono mantenute nello spazio di archiviazione e vengono caricate in memoria o realizzate, in quanto il controllo lo richiede, ad esempio, man mano che i nuovi elementi diventano visibili all'utente.

Ad esempio, il diagramma seguente mostra una casella di riepilogo contenente migliaia di elementi virtualizzati. Poiché il controllo mantiene informazioni complete solo per gli elementi figlio attualmente visibili, il provider può esporre gli elementi di Microsoft Automazione interfaccia utente solo per gli elementi 100-127.

diagramma che mostra gli elementi di una casella di riepilogo virtualizzati e non virtualizzati

I controlli che usano la virtualizzazione rappresentano una sfida perché solo gli elementi realizzati (de virtualizzati) sono completamente disponibili come elementi Automazione interfaccia utente nell'albero Automazione interfaccia utente. Gli elementi virtualizzati non esistono nell'albero, pertanto le informazioni su di esse non sono disponibili.

Per fornire informazioni sugli elementi virtualizzati, i provider implementano il pattern di controllo ItemContainer , che espone l'interfaccia IItemContainerProvider . Il metodo FindItemByProperty trova elementi figlio in base al valore di una determinata proprietà, ad esempio Name, AutomationId o IsSelected. Se un elemento è virtualizzato, FindItemByProperty recupera un Automazione interfaccia utente elemento segnaposto per l'elemento. Un elemento segnaposto è un'implementazione dell'interfaccia IRawElementProviderSimple che supporta solo il pattern di controllo VirtualizedItem .

Il metodo IVirtualizedItemProvider::Realize consente a un client di richiedere che venga realizzato un elemento virtualizzato, esponendo in tal modo un elemento Automazione interfaccia utente completo per l'elemento in modo che siano disponibili tutte le proprietà e i modelli necessari.

Anche se lo scopo principale del pattern di controllo ItemContainer consiste nel supportare scenari di contenitori virtualizzati, può essere implementato da qualsiasi contenitore che recupera gli elementi figlio in base al nome, indipendentemente dal fatto che il contenitore usi la virtualizzazione.

In questo argomento sono contenute le sezioni seguenti.

Linee guida e convenzioni di implementazione

Quando si implementa il pattern di controllo ItemContainer , tenere presenti le linee guida e le convenzioni seguenti:

  • Qualsiasi controllo che può contenere elementi virtualizzati deve supportare il pattern di controllo ItemContainer . Qualsiasi contenitore che supporta il recupero di elementi in base a un valore di proprietà può supportare questo modello, indipendentemente dal fatto che il contenitore usi la virtualizzazione.
  • Quando un contenitore viene virtualizzato, è possibile influire su altri modelli di controlli, ad esempio Selezione, Tabella e Griglia . Ad esempio, il metodo ISelectionProvider::GetSelection può supportare solo gli elementi presenti nel riquadro di visualizzazione o solo gli elementi selezionati attualmente non virtualizzati.
  • Il pattern di controllo Scroll non deve essere interessato dalla virtualizzazione.
  • Nessun numero di elementi o informazioni sull'indice è disponibile per gli elementi virtualizzati. Un controllo virtualizzato può utilizzare la proprietà DescribedBy o ItemStatus per fornire queste informazioni, se necessario.
  • Gli sviluppatori di controlli devono documentare e pubblicare i dettagli di tutte le proprietà Automazione interfaccia utente e i pattern di controllo interessati dall'uso della virtualizzazione. Anche se i pattern di controllo ItemContainer e VirtualizedItem offrono supporto di base, potrebbero non supportare alcuni comportamenti di virtualizzazione.

Le linee guida e i requisiti seguenti si applicano al metodo IItemContainerProvider::FindItemByProperty .

  • Anche se non è necessario, Microsoft consiglia vivamente che FindItemByProperty supporti le proprietà Name, AutomationId e IsSelected .
  • FindItemByProperty può essere lento se deve attraversare più oggetti per trovarne uno corrispondente.
  • FindItemByProperty può essere chiamato ripetutamente per trovare gli elementi in sequenza. Gli elementi possono essere in qualsiasi ordine purché ogni elemento venga restituito una sola volta.
  • È possibile implementare FindItemByProperty per trovare solo gli elementi visualizzati nel controllo o nella visualizzazione contenuto dell'albero Automazione interfaccia utente. Gli elementi visualizzati solo nella visualizzazione non elaborata possono essere ignorati per evitare di recuperare più elementi che rappresentano solo una parte di un "elemento" all'utente.
  • Quando i criteri di ricerca corrispondono a un elemento virtualizzato, il provider può restituire un elemento segnaposto che supporta il pattern di controllo VirtualizedItem . Le linee guida seguenti si applicano agli elementi segnaposto:
    • Il recupero di un elemento segnaposto per un elemento virtualizzato non deve causare modifiche all'interfaccia utente.
    • L'elemento segnaposto deve essere un peer di altri elementi figlio (è necessario un evento di modifica della struttura).
    • Quando possibile, il provider può creare un elemento di automazione completo anziché un segnaposto.
  • Quando i criteri di ricerca corrispondono a un elemento non virtualizzato, il provider deve restituire l'elemento effettivo, non un segnaposto.
  • Quando non viene trovato alcun elemento, IItemContainerProvider::FindItemByProperty deve impostare il parametro pFound su NULL e restituire S_OK.
  • Quando il parametro propertyId è 0, il provider deve restituire l'elemento successivo dopo pStartAfter.
  • Se il parametro pStartAfter è NULL e propertyId è 0, il provider deve restituire il primo elemento nel contenitore.
  • Quando il parametro propertyId è 0, il parametro value viene ignorato.

Le linee guida e i requisiti seguenti si applicano agli elementi segnaposto per gli elementi virtualizzati nell'albero Automazione interfaccia utente.

  • Anche se i provider sono invitati a supportare più proprietà e pattern di controllo per un elemento segnaposto, è necessario solo il pattern di controllo VirtualizedItem .
  • Il provider può invalidare un elemento segnaposto precedente quando viene chiamato di nuovo IItemContainerProvider::FindItemByProperty . Se un client deve realizzare l'elemento segnaposto, deve farlo immediatamente. In caso contrario, l'elemento può essere invalidato se FindItemByProperty viene chiamato di nuovo o se il viewport cambia per qualsiasi motivo.
  • Le azioni dell'interfaccia utente, ad esempio lo scorrimento o il ridimensionamento, possono causare la modifica del riquadro di visualizzazione del contenitore e un nuovo set di elementi figlio diventano visibili. In questo caso, gli elementi segnaposto recuperati in precedenza potrebbero non essere disponibili nell'albero Automazione interfaccia utente.
  • Il provider non deve virtualizzare gli elementi dell'interfaccia utente disponibili sullo schermo nel riquadro di visualizzazione dell'oggetto contenitore.

Membri obbligatori per IItemContainerProvider

Per implementare l'interfaccia IItemContainerProvider , è necessario il metodo seguente.

Membri obbligatori Tipo di membro Note
FindItemByProperty Metodo Nessuno

 

Il pattern di controllo ItemContainer non ha proprietà o eventi associati.

Tipi di controllo e modelli di controllo supportati

Cenni preliminari sui pattern di controllo per l'automazione interfaccia utente

Panoramica dell'albero di automazione dell'interfaccia utente

Modello di controllo VirtualizedItem