Pregunta

¿Qué hace InitializeComponent () y cómo funciona en WPF?

Primero, en general, pero me interesaría especialmente conocer los detalles escabrosos del orden de construcción y lo que sucede cuando hay Propiedades adjuntas.

¿Fue útil?

Solución

La llamada a InitializeComponent () (que generalmente se llama en el constructor predeterminado de al menos Window y UserControl ) es en realidad un método llamada a la clase parcial del control (en lugar de una llamada a la jerarquía de objetos como lo esperaba por primera vez).

Este método localiza un URI en el XAML para la 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.

Más detalladamente, LoadComponent crea una instancia del XamlParser , y construye un árbol de la XAML. Cada nodo es analizado por el XamlParser.ProcessXamlNode () . Esto se pasa a la clase BamlRecordWriter . Algún tiempo después de esto, me pierdo un poco en cómo el BAML se convierte en objetos, pero esto puede ser suficiente para ayudarte en el camino hacia la iluminación.

Nota: Es interesante que el InitializeComponent es un método en la interfaz System.Windows.Markup.IComponentConnector , de la cual Window / UserControl implementa en la clase parcial generada.

Espero que esto ayude!

Otros consejos

Mirar el código siempre ayuda también. Es decir, puedes echar un vistazo a la clase parcial generada (que llama a LoadComponent ) haciendo lo siguiente:

  1. Vaya al panel Explorador de soluciones en la solución de Visual Studio que le interesa.
  2. Hay un botón en la barra de herramientas del Explorador de soluciones llamado "Mostrar todos los archivos". Toggle ese botón.
  3. Ahora, expanda la carpeta obj y luego la carpeta Debug o Release (o la configuración que esté creando) y verá una archivo titulado YourClass .g.cs.

El YourClass .g.cs ... es el código para la clase parcial generada. Nuevamente, si abres eso, puedes ver el método InitializeComponent y cómo llama a LoadComponent ... y mucho más.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top