Domanda

Cosa fa InitializeComponent () e come funziona in WPF?

In primo luogo in generale, ma sarei particolarmente interessato a conoscere i dettagli cruenti dell'ordine di costruzione e cosa succede quando ci sono proprietà associate.

È stato utile?

Soluzione

La chiamata a InitializeComponent () (che di solito viene chiamata nel costruttore predefinito di almeno Window e UserControl ) è in realtà un metodo chiama alla classe parziale del controllo (piuttosto che richiamare la gerarchia degli oggetti come mi aspettavo per la prima volta).

Questo metodo individua un URI in XAML per la Window / UserControl che sta caricando e lo passa a 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 da XamlParser.ProcessXamlNode () . Questo viene passato alla classe BamlRecordWriter . 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 sull'interfaccia System.Windows.Markup.IComponentConnector , di cui Window / Implementazione UserControl nella classe generata parzialmente.

Spero che questo aiuti!

Altri suggerimenti

Anche guardare il codice aiuta sempre. Cioè, puoi effettivamente dare un'occhiata alla classe parziale generata (che chiama LoadComponent ) procedendo come segue:

  1. Vai al riquadro Esplora soluzioni nella soluzione di Visual Studio che ti interessa.
  2. Nella barra degli strumenti di Solution Explorer è presente un pulsante "Mostra tutti i file". Attiva quel pulsante.
  3. Ora espandi la cartella obj e poi la cartella Debug o Rilascio (o qualunque configurazione tu stia creando) e vedrai un file intitolato YourClass .g.cs.

YourClass .g.cs ... è il codice per la classe parziale generata. Ancora una volta, se lo apri puoi vedere il metodo InitializeComponent e come chiama LoadComponent ... e molto altro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top