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 Windowund 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 UserControlund ü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 LoadComponentwird eine Instanz von erstellt XamlParserund ein Baum der XAML erstellt. Jeder Knoten wird von der analysiert XamlParser.ProcessXamlNode(). Dies wird an die BamlRecordWriterKlasse ü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 InitializeComponenteine Methode auf der System.Windows.Markup.IComponentConnectorSchnittstelle, von denen Window/ UserControlin 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.