O que InitializeComponent () faz, e como ele funciona no WPF?
-
05-07-2019 - |
Pergunta
O que InitializeComponent()
fazer, e como ele funciona no WPF?
Em geral primeiro, mas eu seria especialmente interessado em saber os detalhes de ordem de construção, eo que acontece quando não está anexada Propriedades.
Solução
A chamada para InitializeComponent()
(que é normalmente chamado no construtor padrão de pelo menos Window
e UserControl
) é realmente uma chamada de método para a classe parcial do controle (em vez de uma chamada até a hierarquia de objetos como eu esperava primeiro).
Este método localiza uma URI para o XAML para o Window
/ UserControl
que é de carga, e passa-a para o método System.Windows.Application.LoadComponent()
estático. LoadComponent()
carrega o arquivo XAML que está localizado na aprovada em URI, e converte para uma instância do objeto que é especificado pelo elemento raiz do arquivo XAML.
Em mais detalhe, LoadComponent
cria uma instância da XamlParser
, e constrói uma árvore do XAML. Cada nó é analisado pelo XamlParser.ProcessXamlNode()
. Esta é passado para a classe BamlRecordWriter
. Algum tempo depois eu fico um pouco perdido em como o BAML é convertido em objetos, mas isso pode ser o suficiente para ajudá-lo no caminho para a iluminação.
Nota:. Curiosamente, o InitializeComponent
é um método na interface System.Windows.Markup.IComponentConnector
, dos quais Window
/ UserControl
implementar na classe parcial gerado
Espero que isso ajude!
Outras dicas
Olhando para o código sempre ajuda também. Ou seja, você pode realmente ter um olhar para a classe parcial gerada (que as chamadas LoadComponent ), fazendo o seguinte:
- Vá para o painel de Solution Explorer na solução Visual Studio que você está interessado.
- Existe um botão na barra de ferramentas do Solution Explorer intitulado 'Mostrar todos os arquivos'. Alternar esse botão.
- Agora, expanda o pasta obj e, em seguida, o Debug ou pasta Release (ou qualquer configuração que você está construindo) e você verá uma arquivo chamado YourClass .g.cs.
O YourClass .g.cs ... é o código para a classe parcial gerada. Novamente, se você abrir esse se você pode ver o método InitializeComponent e como ela chama LoadComponent ... e muito mais.