¿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 menosWindow
yUserControl
) 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 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,
LoadComponent
crea una instancia deXamlParser
, y construye un árbol de XAML. Cada nodo es analizado por elXamlParser.ProcessXamlNode()
. Esto se pasa a laBamlRecordWriter
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 laSystem.Windows.Markup.IComponentConnector
interfaz, del cualWindow
/UserControl
implement 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