Eventi di durata degli oggetti
In questo argomento vengono descritti gli eventi WPF specifici che denotano le fasi della durata di un oggetto in termini di creazione, utilizzo e distruzione.
Nel presente argomento sono contenute le seguenti sezioni.
- Prerequisiti
- Eventi di durata degli oggetti
- Eventi di durata comuni degli elementi
- Elementi del modello di applicazione di eventi di durata
- Argomenti correlati
Prerequisiti
In questo argomento si presuppone la conoscenza delle proprietà di dipendenza dal punto di vista di un consumer di proprietà di dipendenza esistenti nelle classi Windows Presentation Foundation (WPF), nonché la lettura dell'argomento Cenni preliminari sulle proprietà di dipendenza. Per seguire gli esempi illustrati in questo argomento, è necessaria inoltre la comprensione di Extensible Application Markup Language (XAML) (vedere Cenni preliminari su XAML (WPF)) e della modalità di scrittura delle applicazioni WPF.
Eventi di durata degli oggetti
Tutti gli oggetti nel codice gestito Microsoft .NET Framework attraversano un insieme simile di fasi di vita, creazione, utilizzo e distruzione. Per molti oggetti la fase di finalizzazione della vita si verifica come parte della fase di distruzione. Gli oggetti WPF, più specificamente gli oggetti visivi che WPF identifica come elementi, hanno una serie comune di fasi di vita dell'oggetto. I modelli di programmazione e applicazione WPF espongono queste fasi come una serie di eventi. Esistono quattro tipi principali di oggetti in WPF in relazione agli eventi di durata: gli elementi in generale, gli elementi finestra, gli host di spostamento e gli oggetti applicazione. Le finestre e gli host di esplorazione fanno parte anche del più ampio raggruppamento di oggetti visivi (elementi). In questo argomento vengono descritti gli eventi di durata che sono comuni a tutti gli elementi; vengono quindi introdotti quelli più specifici che si applicano alle definizioni dell'applicazione, alle finestre o agli host di spostamento.
Eventi di durata comuni degli elementi
Tutti gli elementi a livello di framework WPF (ossia gli oggetti derivanti da FrameworkElement o da FrameworkContentElement) hanno in comune tre eventi di durata: Initialized, Loaded e Unloaded.
Initialized
Initialized viene generato per primo e corrisponde approssimativamente all'inizializzazione dell'oggetto tramite la chiamata al relativo costruttore. Poiché l'evento si verifica in seguito all'inizializzazione, si garantisce che tutte le proprietà dell'oggetto siano impostate. Un'eccezione può verificarsi nei casi di utilizzo di espressioni quali risorse dinamiche o associazioni; queste saranno espressioni non valutate. Come conseguenza del requisito che impone l'impostazione di tutte le proprietà, la sequenza di eventi Initialized generata dagli elementi annidati definiti nel markup viene ordinata visualizzando prima gli elementi di livello più basso nella struttura ad albero dell'elemento e quindi gli elementi padre in direzione della radice. Questo ordine è determinato dal fatto che le relazioni padre-figlio e il contenimento sono proprietà e pertanto l'elemento padre non può segnalare l'inizializzazione finché tutti gli elementi figlio che riempiono la proprietà non sono stati completamente inizializzati.
Durante la scrittura dei gestori in risposta all'evento Initialized, è necessario considerare che non esiste alcuna garanzia che siano stati creati tutti gli altri elementi della struttura ad albero dell'elemento (o albero logico o struttura ad albero visuale) nell'area in cui è associato il gestore, in particolare gli elementi padre. Le variabili membro possono essere null oppure le origini dati potrebbero non essere ancora popolate dall'associazione sottostante (anche al livello dell'espressione).
Loaded
Loaded viene generato successivamente. L'evento Loaded viene generato prima del rendering finale, ma dopo che il sistema di layout ha calcolato tutti i valori necessari per il rendering. Loaded comporta che l'albero logico all'interno del quale è contenuto un elemento sia completo e si connetta a un'origine della presentazione che fornisce HWND e la superficie di rendering. L'associazione dati standard (associazione alle origini locali, ad esempio le altre proprietà o le origini dati definite in modo diretto) sarà stata eseguita prima di Loaded. È probabile che l'associazione dati asincrona (a origini esterne o dinamiche) si sia verificata, ma a causa della stessa natura asincrona non è possibile averne la certezza.
Il meccanismo mediante il quale viene generato l'evento Loaded è diverso rispetto a Initialized. L'evento Initialized viene generato un elemento per volta, senza una coordinazione diretta da parte di una struttura ad albero dell'elemento completata. Al contrario, l'evento Loaded viene generato come operazione coordinata attraverso l'intera struttura ad albero dell'elemento (in particolare l'albero logico). Quando tutti gli elementi della struttura ad albero si trovano in uno stato in cui sono considerati come caricati, l'evento Loaded viene generato innanzitutto sull'elemento radice. L'evento Loaded viene quindi generato successivamente in ciascun elemento figlio.
Nota |
---|
Questo comportamento potrebbe in apparenza essere analogo al tunneling per un evento indirizzato.Tuttavia, le informazioni non vengono passate da evento a evento.Ogni elemento ha sempre la possibilità di gestire il relativo evento Loaded e contrassegnando i dati degli eventi come gestiti non si avranno effetti al di là di quell'elemento. |
Unloaded
Unloaded viene generato per ultimo e avviato tramite l'origine della presentazione o dalla rimozione del padre visuale. Quando Unloaded viene generato e gestito, l'impostazione dell'elemento corrispondente al padre dell'origine dell'evento (determinato dalla proprietà Parent) o di qualsiasi elemento specificato in un livello alto della struttura ad albero logico o visuale potrebbe già essere stata annullata; pertanto è possibile che l'associazione dati, i riferimenti alle risorse e gli stili non siano impostati sul rispettivo valore di runtime normale o sull'ultimo valore noto.
Elementi del modello di applicazione di eventi di durata
In base agli eventi di durata comuni per gli elementi sono previsti i seguenti elementi del modello di applicazione: Application, Window, Page, NavigationWindow e Frame. Questi estendono gli eventi di durata comuni con eventi aggiuntivi che sono pertinenti al relativo scopo specifico e vengono descritti in dettaglio nelle seguenti sezioni:
Application: Cenni preliminari sulla gestione di applicazioni.
Page, NavigationWindow e Frame: Cenni preliminari sulla navigazione.