Cosa fa InitializeComponent()
e come funziona in WPF?
In generale prima, ma sarei particolarmente interessato a conoscere i dettagli cruenti dell'ordine di costruzione e cosa succede quando ci sono Proprietà associate.
Cosa fa InitializeComponent()
e come funziona in WPF?
In generale prima, ma sarei particolarmente interessato a conoscere i dettagli cruenti dell'ordine di costruzione e cosa succede quando ci sono Proprietà associate.
Risposte:
La chiamata a InitializeComponent()
(che di solito viene chiamata nel costruttore predefinito di almeno Window
e UserControl
) è in realtà una chiamata di metodo alla classe parziale del controllo (piuttosto che una chiamata alla gerarchia degli oggetti come mi aspettavo per la prima volta).
Questo metodo individua un URI in XAML per il Window
/ UserControl
che sta caricando e lo passa al System.Windows.Application.LoadComponent()
metodo statico. LoadComponent()
carica il file XAML che si trova nell'URI passato e lo converte in un'istanza dell'oggetto specificato dall'elemento root del file XAML.
Più in dettaglio, LoadComponent
crea un'istanza di XamlParser
e crea un albero di XAML. Ogni nodo è analizzato dal XamlParser.ProcessXamlNode()
. Questo viene passato alla BamlRecordWriter
classe. Qualche tempo dopo mi perdo un po 'nel modo in cui la BAML viene convertita in oggetti, ma questo potrebbe essere sufficiente per aiutarti nel percorso verso l'illuminazione.
Nota: è interessante notare che InitializeComponent
è un metodo System.Windows.Markup.IComponentConnector
sull'interfaccia, di cui Window
/ UserControl
implementa nella classe generata parzialmente.
Spero che questo ti aiuti!
Anche guardare il codice aiuta sempre. Cioè, puoi effettivamente dare un'occhiata alla classe parziale generata (che chiama LoadComponent ) nel modo seguente:
I YourClass .g.cs ... è il codice di classe parziale generato. Ancora una volta, se lo apri puoi vedere il metodo InitializeComponent e come chiama LoadComponent ... e molto altro.