it-swarm.com.de

Was macht InitializeComponent () und wie funktioniert es in WPF?

Was macht InitializeComponent() und wie funktioniert es in WPF?

In der Regel zuerst, aber ich würde mich besonders interessieren, die blutigen Details der Reihenfolge der Konstruktion zu kennen, und was passiert, wenn es angehängte Eigenschaften gibt.

152

Der Aufruf von InitializeComponent() (der normalerweise im Standardkonstruktor von mindestens Window und UserControl aufgerufen wird) ist eigentlich ein Methodenaufruf an die Teilklasse des Steuerelements (stattdessen) als einen Aufruf der Objekthierarchie, wie ich es zuerst erwartet hatte).

Diese Methode findet einen URI für die Window/UserControl, die geladen wird, in der XAML und übergibt ihn an die statische Methode System.Windows.Application.LoadComponent(). LoadComponent() lädt die XAML-Datei, die sich am übergebenen URI befindet, und konvertiert sie in eine Instanz des Objekts, das vom Stammelement der XAML-Datei angegeben wird.

Im Einzelnen erstellt LoadComponent eine Instanz von XamlParser und erstellt einen Baum der XAML. Jeder Knoten wird von der Funktion XamlParser.ProcessXamlNode() analysiert. Dies wird an die Klasse BamlRecordWriter übergeben. Einige Zeit später verliere ich mich ein wenig darin, wie die BAML in Objekte konvertiert wird, aber dies mag ausreichen, um Ihnen auf dem Weg zur Erleuchtung zu helfen.

Hinweis: Interessanterweise ist das InitializeComponent eine Methode auf dem System.Windows.Markup.IComponentConnector Schnittstelle, von der Window/UserControl in die teilweise generierte Klasse implementiert wird.

Hoffe das hilft!

148
Brad Leach

Ein Blick in den Code hilft immer auch. Das heißt, Sie können sich die generierte Teilklasse (die LoadComponent aufruft) folgendermaßen ansehen:

  1. Wechseln Sie in der gewünschten Visual Studio-Lösung zum Bereich "Projektmappen-Explorer".
  2. In der Symbolleiste des Projektmappen-Explorers befindet sich eine Schaltfläche mit dem Titel "Alle Dateien anzeigen". Schalte diese Schaltfläche um.
  3. Erweitern Sie nun den Ordner obj und dann den Ordner Debug oder Release (oder welche Konfiguration Sie auch immer erstellen), und Sie sehen eine Datei mit dem Titel YourClass . G.cs.

Die YourClass . G.cs ... ist der Code für die generierte Teilklasse. Wenn Sie das öffnen, können Sie die InitializeComponent-Methode und den Aufruf von LoadComponent und vieles mehr sehen.

22
cplotts