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