O que InitializeComponent()
faz e como funciona no WPF?
Em geral, primeiro, mas eu estaria especialmente interessado em conhecer os detalhes sangrentos da ordem de construção e o que acontece quando existem Propriedades Anexadas.
O que InitializeComponent()
faz e como funciona no WPF?
Em geral, primeiro, mas eu estaria especialmente interessado em conhecer os detalhes sangrentos da ordem de construção e o que acontece quando existem Propriedades Anexadas.
Respostas:
A chamada para InitializeComponent()
(que geralmente é chamada no construtor padrão de pelo menos Window
e UserControl
) é na verdade uma chamada de método para a classe parcial do controle (em vez de uma chamada para a hierarquia de objetos, como eu esperava inicialmente).
Esse método localiza um URI no XAML para o Window
/ UserControl
que está sendo carregado e o passa para o System.Windows.Application.LoadComponent()
método estático. LoadComponent()
carrega o arquivo XAML localizado no URI passado e o converte em uma instância do objeto especificado pelo elemento raiz do arquivo XAML.
Mais detalhadamente, LoadComponent
cria uma instância do XamlParser
e cria uma árvore do XAML. Cada nó é analisado pelo XamlParser.ProcessXamlNode()
. Isso é passado para a BamlRecordWriter
classe. Algum tempo depois disso, fico um pouco perdido na forma como o BAML é convertido em objetos, mas isso pode ser suficiente para ajudá-lo no caminho da iluminação.
Nota: Curiosamente, o InitializeComponent
é um método na System.Windows.Markup.IComponentConnector
interface, do qual Window
/ UserControl
implementa na classe gerada parcial.
Espero que isto ajude!
Olhar para o código sempre ajuda também. Ou seja, você pode realmente dar uma olhada na classe parcial gerada (que chama LoadComponent ) fazendo o seguinte:
O YourClass .g.cs ... é o código para a classe parcial gerada. Novamente, se você abrir isso, poderá ver o método InitializeComponent e como ele chama LoadComponent ... e muito mais.