Que fait InitializeComponent()
et comment fonctionne-t-il dans WPF?
En général d'abord, mais je serais particulièrement intéressé de connaître les détails sanglants de l'ordre de construction et ce qu'il se passe lorsqu'il y a des propriétés attachées.
L'appel à InitializeComponent()
(généralement appelé dans le constructeur par défaut d'au moins Window
et UserControl
) est en fait un appel de méthode à la classe partielle du contrôle (plutôt d’appeler la hiérarchie d’objets comme je l’espérais au départ).
Cette méthode localise un URI vers le XAML pour le Window
/UserControl
en cours de chargement et le transmet à la méthode System.Windows.Application.LoadComponent()
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 crée un arbre du XAML. Chaque nœud est analysé par le 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.
Note: Fait intéressant, le InitializeComponent
est une méthode sur le System.Windows.Markup.IComponentConnector
interface, dont Window
/UserControl
implémente dans la classe générée partielle.
J'espère que cela t'aides!
Regarder le code aide toujours aussi. En d’autres termes, vous pouvez réellement examiner la classe partielle générée (qui appelle LoadComponent) en procédant comme suit:
Le YourClass . 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.