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.
c#
.net
wpf
attached-properties
Tim Lovell-Smith
quelle
quelle
Antworten:
Der Aufruf von
InitializeComponent()
(der normalerweise im Standardkonstruktor von mindestensWindow
und aufgerufen wirdUserControl
) 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 XAMLUserControl
und übergibt ihn an dieSystem.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 erstelltXamlParser
und ein Baum der XAML erstellt. Jeder Knoten wird von der analysiertXamlParser.ProcessXamlNode()
. Dies wird an dieBamlRecordWriter
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 derSystem.Windows.Markup.IComponentConnector
Schnittstelle, von denenWindow
/UserControl
in der Teil generierte Klasse implementieren.Hoffe das hilft!
quelle
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.
quelle