155 votes

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

Que fait InitializeComponent() et comment cela 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 qui se passe quand il y a des propriétés attachées.

152voto

Brad Leach Points 9012

L'appel à l' InitializeComponent() (ce qui est généralement appelée dans le constructeur par défaut d'au moins Window et UserControl) est en fait un appel de méthode à la classe partielle de la commande (plutôt que d'un appel de la hiérarchie de l'objet que j'ai d'abord attendu).

Cette méthode permet de localiser un URI pour le XAML de la Window/UserControl qui est en cours de chargement, et le transmet à l' System.Windows.Application.LoadComponent() méthode statique. LoadComponent() des charges le fichier XAML qui est situé à l'adopté dans l'URI, et la convertit en une instance de l'objet qui est spécifié par l'élément racine du fichier XAML.

Plus en détail, LoadComponent crée une instance de l' XamlParser, et construit un arbre de la XAML. Chaque nœud est analysé par l' XamlParser.ProcessXamlNode(). Cela se passait à l' BamlRecordWriter classe. Quelques temps après je me suis un peu perdu dans la façon dont le BAML est convertie à des objets, mais cela peut être suffisant pour vous aider sur le chemin de l'éveil.

Remarque: il est Intéressant de noter, l' InitializeComponent est une méthode de l' System.Windows.Markup.IComponentConnector d'interface, dont Window/UserControl mettre en œuvre dans l'partielle de la classe générée.

Espérons que cette aide!

24voto

cplotts Points 7630

En regardant le code est toujours utile de trop. Qui est, vous pouvez effectivement prendre un coup d'oeil à la classe partielle générée (qui appelle LoadComponent) en procédant comme suit:

  1. Aller pour le volet Explorateur de solutions de Visual Studio solution qui vous intéressent.
  2. Il y a un bouton dans la barre d'outils de l'Explorateur de solutions, intitulée "Afficher Tous les Fichiers". La bascule de cette touche.
  3. Maintenant, développez l' obj dossier et ensuite le Debug ou Release dossier (ou quelle que soit la configuration du bâtiment) et vous verrez un fichier intitulé YourClass.g.cs.

Le YourClass.g.cs ... c'est le code généré classe partielle. Encore une fois, si vous ouvrez que vous pouvez voir la méthode InitializeComponent et comment il appelle LoadComponent ... et bien plus encore.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X