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.
c#
.net
wpf
attached-properties
Tim Lovell-Smith
fonte
fonte
Respostas:
A chamada para
InitializeComponent()
(que geralmente é chamada no construtor padrão de pelo menosWindow
eUserControl
) é 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 oSystem.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 doXamlParser
e cria uma árvore do XAML. Cada nó é analisado peloXamlParser.ProcessXamlNode()
. Isso é passado para aBamlRecordWriter
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 naSystem.Windows.Markup.IComponentConnector
interface, do qualWindow
/UserControl
implementa na classe gerada parcial.Espero que isto ajude!
fonte
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.
fonte