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.

Foi útil?

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:

  1. Vá para o painel de Solution Explorer na solução Visual Studio que você está interessado.
  2. Existe um botão na barra de ferramentas do Solution Explorer intitulado 'Mostrar todos os arquivos'. Alternar esse botão.
  3. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top