Utilizzo di elementi virtualizzati

Questo argomento descrive come usare le funzionalità fornite dai pattern di controllo ItemContainer e VirtualizedItem per trovare e recuperare informazioni sugli elementi virtualizzati.

Panoramica della virtualizzazione

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.

I controlli che usano la virtualizzazione rappresentano una sfida perché solo gli elementi realizzati sono completamente disponibili come elementi di Microsoft Automazione interfaccia utente nell'albero Automazione interfaccia utente. Gli elementi virtualizzati non esistono nell'albero, quindi le informazioni su di esse non sono disponibili per i client. Per recuperare informazioni sugli elementi virtualizzati, i client necessitano di un modo per forzare Automazione interfaccia utente di passare la richiesta per realizzare gli elementi al controllo. Dopo aver realizzato gli elementi, Automazione interfaccia utente possibile creare Automazione interfaccia utente elementi per tali elementi. Automazione interfaccia utente include due pattern di controllo per consentire ai client di lavorare con elementi virtualizzati: ItemContainer e VirtualizedItem.

Modalità di supporto della virtualizzazione da parte di un controllo

Qualsiasi controllo che può contenere elementi virtualizzati deve supportare il pattern di controllo ItemContainer . Inoltre, qualsiasi elemento che può essere virtualizzato deve supportare il pattern di controllo VirtualizedItem . Le funzionalità esposte dai pattern di controllo ItemContainer e VirtualizedItem sono accessibili ai client tramite le interfacce IUIAutomationItemContainerPattern e IUIAutomationVirtualizedItemPattern .

Come i client trovano e realizzano elementi virtualizzati

I client possono usare il metodo IUIAutomationItemContainerPattern::FindItemByProperty per cercare elementi figlio nel contenitore in base al valore di una determinata proprietà. Il metodo può anche recuperare il primo elemento nel contenitore o l'elemento che segue l'elemento specificato. Se viene trovato un elemento figlio corrispondente, FindItemByProperty recupera un'interfaccia IUIAutomationElement per l'elemento. Tuttavia, se l'elemento figlio è virtualizzato, l'interfaccia IUIAutomationElement è un segnaposto. L'errore UIA_E_ELEMENTNOTAVAILABLE si verifica quando il client tenta di usare l'interfaccia IUIAutomationElement per recuperare i valori delle proprietà o chiamare metodi non ancora disponibili. Le proprietà o i metodi disponibili tramite un segnaposto dipendono dall'implementazione del controllo. L'unico requisito per un segnaposto consiste nel supportare l'interfaccia IUIAutomationVirtualizedItemPattern .

L'errore UIA_E_ELEMENTNOTAVAILABLE indica al client che un elemento può essere virtualizzato. Il client deve rispondere recuperando l'interfaccia IUIAutomationVirtualizedItemPattern per l'elemento e quindi rendendosi conto dell'elemento chiamando il metodo IUIAutomationVirtualizedItemPattern::Realize . Se l'operazione ha esito positivo, l'interfaccia IUIAutomationElement è completamente funzionante con tutte le proprietà appropriate disponibili.

A seconda dell'implementazione del controllo, la chiamata a IUIAutomationVirtualizedItemPattern::Realize può causare lo scorrimento dell'elemento nella visualizzazione del controllo. Tuttavia, un client non deve basarsi sull'elemento che scorre nella visualizzazione o rende visibile. Per assicurarsi che l'elemento sia visibile, il client può usare il metodo IUIAutomationScrollItemPattern::ScrollIntoView .

Esempio

Per un esempio di codice che illustra come usare il supporto Automazione interfaccia utente per la virtualizzazione, vedere Come recuperare un elemento virtualizzato.

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