Что делает InitializeComponent () и как он работает в WPF?
-
05-07-2019 - |
Вопрос
Что делает InitializeComponent ()
и как это работает в 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 ... и многое другое.