Que fait InitializeComponent()
et comment ça marche 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 qui se passe quand il y a des propriétés attachées.
c#
.net
wpf
attached-properties
Tim Lovell-Smith
la source
la source
Réponses:
L'appel à
InitializeComponent()
(qui est généralement appelé dans le constructeur par défaut d'au moinsWindow
etUserControl
) est en fait un appel de méthode à la classe partielle du contrôle (plutôt qu'un appel à la hiérarchie d'objets comme je m'y attendais au départ).Cette méthode localise un URI vers le XAML pour le
Window
/UserControl
qui est en cours de chargement et le transmet à laSystem.Windows.Application.LoadComponent()
méthode statique.LoadComponent()
charge le fichier XAML qui se trouve au niveau de l'URI passé 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 duXamlParser
, et construit une arborescence du XAML. Chaque nœud est analysé par leXamlParser.ProcessXamlNode()
. Cela est transmis à laBamlRecordWriter
classe. Quelque temps après cela, je me perds un peu dans la façon dont le BAML est converti en objets, mais cela peut suffire à vous aider sur le chemin de l'illumination.Remarque: Il
InitializeComponent
est intéressant de noter que le est une méthode sur l'System.Windows.Markup.IComponentConnector
interface, dontWindow
/UserControl
implémente dans la classe générée partielle.J'espère que cela t'aides!
la source
Regarder le code aide toujours aussi. Autrement dit, vous pouvez réellement jeter un œil à la classe partielle générée (qui appelle LoadComponent ) en procédant comme suit:
Les YourClass .g.cs ... est le code de produit classe partielle. Encore une fois, si vous ouvrez cela, vous pouvez voir la méthode InitializeComponent et comment elle appelle LoadComponent ... et bien plus encore.
la source