¿Qué hace InitializeComponent()y cómo funciona en WPF?
En general, primero, pero me interesaría especialmente conocer los detalles sangrientos del orden de construcción y lo que sucede cuando hay propiedades adjuntas.
c#
.net
wpf
attached-properties
Tim Lovell-Smith
fuente
fuente

Respuestas:
La llamada a
InitializeComponent()(que generalmente se llama en el constructor predeterminado de al menosWindowyUserControl) es en realidad una llamada de método a la clase parcial del control (en lugar de una llamada a la jerarquía de objetos como esperaba inicialmente).Este método ubica un URI en el XAML para el
Window/UserControlque se está cargando y lo pasa alSystem.Windows.Application.LoadComponent()método estático.LoadComponent()carga el archivo XAML que se encuentra en el URI pasado y lo convierte en una instancia del objeto especificado por el elemento raíz del archivo XAML.Con más detalle,
LoadComponentcrea una instancia deXamlParser, y construye un árbol de XAML. Cada nodo es analizado por elXamlParser.ProcessXamlNode(). Esto se pasa a laBamlRecordWriterclase. Algún tiempo después de esto, me pierdo un poco en cómo la BAML se convierte en objetos, pero esto puede ser suficiente para ayudarlo en el camino hacia la iluminación.Nota: Curiosamente,
InitializeComponentes un método en laSystem.Windows.Markup.IComponentConnectorinterfaz, del cualWindow/UserControlimplement en la clase parcial generada.¡Espero que esto ayude!
fuente
Mirar el código siempre ayuda también. Es decir, puede echar un vistazo a la clase parcial generada (que llama a LoadComponent ) haciendo lo siguiente:
Los YourClass .g.cs ... es el código para la clase parcial generado. Nuevamente, si abre eso, puede ver el método InitializeComponent y cómo se llama LoadComponent ... y mucho más.
fuente