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 Windowe 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/ UserControlche 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, LoadComponentcrea un'istanza di XamlParsere crea un albero di XAML. Ogni nodo è analizzato dal XamlParser.ProcessXamlNode(). Questo viene passato alla BamlRecordWriterclasse. 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.IComponentConnectorsull'interfaccia, di cui Window/ UserControlimplementa 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.