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