Что делает InitializeComponent()
и как это работает в WPF?
В общем, во-первых, но мне было бы особенно интересно узнать мрачные детали порядка строительства и что происходит, когда есть Attached Properties.
c#
.net
wpf
attached-properties
Тим Ловелл-Смит
источник
источник
Ответы:
Вызов
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
реализован в частично сгенерированном классе.Надеюсь это поможет!
источник
Просмотр кода всегда тоже помогает. То есть вы можете взглянуть на сгенерированный частичный класс (который вызывает LoadComponent ), выполнив следующие действия:
В YourClass .g.cs ... код для сгенерированного частичного класса. Опять же, если вы откроете это, вы увидите метод InitializeComponent и то, как он вызывает LoadComponent ... и многое другое.
источник