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.
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!
Ein Blick in den Code hilft immer auch. Das heißt, Sie können sich die generierte Teilklasse (die LoadComponent aufruft) folgendermaßen ansehen:
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.