Question

Que fait InitializeComponent () et comment fonctionne-t-il dans WPF?

En général d’abord, mais j’aimerais surtout connaître les détails sanglants de l’ordre de construction, et ce qui se passe quand il ya des propriétés attachées.

Était-ce utile?

La solution

L'appel à InitializeComponent () (généralement appelé dans le constructeur par défaut d'au moins Window et UserControl ) est en réalité une méthode appel à la classe partielle du contrôle (plutôt qu’un appel de la hiérarchie d’objets comme je l’attendais au début).

Cette méthode localise un URI vers le XAML pour le Window / UserControl en cours de chargement et le transmet au System.Windows.Application.LoadComponent ( ) méthode statique. LoadComponent () charge le fichier XAML situé dans l'URI transmis et le convertit en une instance de l'objet spécifié par l'élément racine du fichier XAML.

Plus en détail, LoadComponent crée une instance du XamlParser et construit un arbre du XAML. Chaque nœud est analysé par XamlParser.ProcessXamlNode () . Ceci est passé à la classe BamlRecordWriter . Quelque temps après, je suis un peu perdu dans la conversion du BAML en objets, mais cela peut suffire à vous aider sur le chemin de l'illumination.

Remarque: il est intéressant de noter que InitializeComponent est une méthode de l'interface System.Windows.Markup.IComponentConnector , dont Window / UserControl implémenté dans la classe partielle générée.

J'espère que ça aide!

Autres conseils

Regarder le code aide toujours aussi. En d’autres termes, vous pouvez réellement consulter la classe partielle générée (appelée LoadComponent ) en procédant comme suit:

  1. Accédez au volet Explorateur de solutions de la solution Visual Studio qui vous intéresse.
  2. La barre d'outils de l'Explorateur de solutions contient un bouton intitulé "Afficher tous les fichiers". Basculez ce bouton.
  3. Développez maintenant le dossier obj , puis le dossier Déboguer ou Valider (ou la configuration que vous construisez) et vous verrez apparaître un fichier intitulé YourClass .g.cs.

La VotreClasse .g.cs ... est le code de la classe partielle générée. Encore une fois, si vous l'ouvrez, vous pouvez voir la méthode InitializeComponent et comment elle appelle LoadComponent ... et bien plus encore.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top