Вызов InitializeComponent()
(который обычно вызывается в конструкторе по умолчанию как минимум Window
и UserControl
) на самом деле является вызовом метода частичного класса элемента управления (а не вызовом иерархии объектов как я и ожидал).
Этот метод находит URI для XAML для Window
/ UserControl
, который загружается, и передает его статическому методу System.Windows.Application.LoadComponent()
. LoadComponent()
загружает файл XAML, расположенный в переданном в URI, и преобразует его в экземпляр объекта, указанный корневым элементом файла XAML.
Более подробно, LoadComponent
создает экземпляр XamlParser
и строит дерево XAML. Каждый узел анализируется XamlParser.ProcessXamlNode()
. Это передается классу BamlRecordWriter
. Через некоторое время я немного теряюсь в том, как BAML преобразуется в объекты, но этого может быть достаточно, чтобы помочь вам на пути к просветлению.
Примечание. Интересно отметить, что InitializeComponent
- это метод интерфейса System.Windows.Markup.IComponentConnector
, из которого Window
/ UserControl
реализуется в частично сгенерированном классе.
Надеюсь, это поможет!