Was macht InitializeComponent()
und wie funktioniert es in WPF?
Im Allgemeinen zuerst, aber ich wäre besonders interessiert, die blutigen Details der Reihenfolge der Konstruktion zu kennen und was passiert, wenn es angehängte Eigenschaften gibt.
Was macht InitializeComponent()
und wie funktioniert es in WPF?
Im Allgemeinen zuerst, aber ich wäre besonders interessiert, die blutigen Details der Reihenfolge der Konstruktion zu kennen und was passiert, wenn es angehängte Eigenschaften gibt.
Antworten:
Der Aufruf von InitializeComponent()
(der normalerweise im Standardkonstruktor von mindestens Window
und aufgerufen wird UserControl
) ist eigentlich ein Methodenaufruf an die Teilklasse des Steuerelements (und nicht ein Aufruf der Objekthierarchie, wie ich es zuerst erwartet hatte).
Diese Methode sucht einen URI für das zu ladende Window
/ an die XAML UserControl
und übergibt ihn an die System.Windows.Application.LoadComponent()
statische Methode. LoadComponent()
Lädt die XAML-Datei, die sich am übergebenen URI befindet, und konvertiert sie in eine Instanz des Objekts, die vom Stammelement der XAML-Datei angegeben wird.
Im Detail LoadComponent
wird eine Instanz von erstellt XamlParser
und ein Baum der XAML erstellt. Jeder Knoten wird von der analysiert XamlParser.ProcessXamlNode()
. Dies wird an die BamlRecordWriter
Klasse übergeben. Einige Zeit später verliere ich mich ein wenig darin, wie die BAML in Objekte konvertiert wird, aber dies kann ausreichen, um Ihnen auf dem Weg zur Erleuchtung zu helfen.
Hinweis: Interessanterweise ist die InitializeComponent
eine Methode auf der System.Windows.Markup.IComponentConnector
Schnittstelle, von denen Window
/ UserControl
in der Teil generierte Klasse implementieren.
Hoffe das hilft!
Das Betrachten des Codes hilft auch immer. Das heißt, Sie können sich die generierte Teilklasse (die LoadComponent aufruft ) wie folgt ansehen :
Die YourClass .g.cs ... ist der Code für die generierte Teilklasse. Wenn Sie das öffnen, sehen Sie erneut die InitializeComponent-Methode und wie sie LoadComponent aufruft ... und vieles mehr.