Что делает InitializeComponent()
и как это работает в WPF?
В общем, сначала, но мне особенно было бы интересно узнать подробности порядка построения и что происходит, когда есть Attached Properties.
Что делает InitializeComponent()
и как это работает в WPF?
В общем, сначала, но мне особенно было бы интересно узнать подробности порядка построения и что происходит, когда есть Attached Properties.
Вызов InitializeComponent()
(который обычно вызывается в конструкторе по умолчанию по крайней мере для Window
и UserControl
) на самом деле является вызовом метода частичного класса элемента управления (а не вызовом иерархии объектов, как я сначала ожидал).
Этот метод находит URI в XAML для загружаемого _4 _ / _ 5_ и передает его статическому методу System.Windows.Application.LoadComponent()
. LoadComponent()
загружает файл XAML, расположенный по переданному в URI, и преобразует его в экземпляр объекта, указанного корневым элементом файла XAML.
Более подробно, LoadComponent
создает экземпляр XamlParser
и строит дерево XAML. Каждый узел анализируется XamlParser.ProcessXamlNode()
. Это передается классу BamlRecordWriter
. Некоторое время спустя я немного теряюсь в том, как BAML преобразуется в объекты, но этого может быть достаточно, чтобы помочь вам на пути к просветлению.
Примечание. Интересно, что InitializeComponent
- это метод интерфейса System.Windows.Markup.IComponentConnector
, который _14 _ / _ 15_ реализуется в частично сгенерированном классе.
Надеюсь это поможет!
Глядя на код, тоже всегда помогает. То есть вы действительно можете взглянуть на сгенерированный частичный класс (который вызывает LoadComponent), выполнив следующие действия:
YourClass .g.cs ... - это код для сгенерированного частичного класса. Опять же, если вы откроете его, вы увидите метод InitializeComponent и то, как он вызывает LoadComponent ... и многое другое.