Что делает 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... и многое другое.