InitializeComponent
es un método definido en la interfaz System.Windows.Markup.IComponentConnector
y se utiliza para cargar la página compilada de un componente.
Ver MSDN
extracto a continuación de esta link que cuenta con más información:
IComponentConnector
se utiliza internamente por Baml2006Reader
.
Las implementaciones de InitializeComponent
son ampliamente observables como parte de la infraestructura proporcionada por los marcos o las tecnologías que usan XAML
combinados con los modelos de aplicación y programación. Por ejemplo, siempre que observe las clases generadas para los elementos raíz de XAML en las páginas y aplicaciones de WPF, verá InitializeComponent definido en la salida. Ese método también existe en el ensamblado compilado y desempeña un papel en el modelo de aplicación WPF de cargar el contenido XAML UI en tiempo de análisis XAML (y supongo que InitializeComponent
debe estar en una interfaz y ser público para que otros ensamblajes externos relacionados con WPF puedan hacer uso de eso).
Para explicar esto más, ir a la definición del método en su InitializeComponent()
(por ejemplo): Window1.g.cs
clase de, por ejemplo: WPFProject
proyecto, y cambiar su acceso desde public
a private
(mantener el .G. cs archivo abierto en su proyecto de lo contrario el proceso de construcción anula este archivo, y usted no será capaz de ver el error)
Ahora, cuando se compila el proyecto de WPF, que arroja un error de compilación de la siguiente manera:
Error 22 'WPFProject.Window1' no implementa miembro de interfaz 'System.Windows.Markup.IComponentConnector.InitializeComponent()'. 'WPFProject.Window1.InitializeComponent()' no puede implementar un miembro de interfaz porque no es público.
Además, InitializeComponent()
está marcado con el atributo [System.Diagnostics.DebuggerNonUserCodeAttribute()]
por lo que no se puede recorrer este método durante la depuración.
Hay otro SO QA discussion, que le ayudaría a explicar más en detalle
Sin una llamada a InitializeComponent XAML no conseguirá analizado – Sharun
@Sharun, sí, pero no debería ser llamado fuera del control – SiberianGuy
@Sharun: Se se llama dentro del constructor del control, ¿no es así? Entonces no tiene que ser público ... –