¿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.
¿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.
Respuestas:
La llamada a InitializeComponent()
(que generalmente se llama en el constructor predeterminado de al menos Window
y UserControl
) 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
/ UserControl
que se está cargando y lo pasa al System.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, LoadComponent
crea una instancia de XamlParser
, y construye un árbol de XAML. Cada nodo es analizado por el XamlParser.ProcessXamlNode()
. Esto se pasa a la BamlRecordWriter
clase. 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, InitializeComponent
es un método en la System.Windows.Markup.IComponentConnector
interfaz, del cual Window
/ UserControl
implement en la clase parcial generada.
¡Espero que esto ayude!
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.