Что делает InitializeComponent () и как он работает в WPF?



что значит InitializeComponent() do, и как это работает в WPF?



В общем сначала, но мне было бы особенно интересно узнать кровавые детали порядка строительства, и что происходит, когда есть прикрепленные свойства.

813   2  

2 ответов:

вызов 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 интерфейс, of который Window/UserControl реализовать в частично сгенерированном классе.

надеюсь, что это помогает!

глядя на код всегда тоже помогает. То есть, вы можете фактически взглянуть на сгенерированный частичный класс (который вызывает LoadComponent) следующим образом:

  1. перейдите на панель Обозреватель решений в интересующем вас решении Visual Studio.
  2. на панели инструментов обозревателя решений есть кнопка "Показать все файлы". Переключите эту кнопку.
  3. теперь разверните obj папка, а затем Debug или релиз папка (или любая конфигурация, которую вы создаете), и вы увидите файл под названием YourClass.г.ЗС.

The YourClass.г.ЗС ... код для созданного разделяемого класса. Опять же, если вы откроете это, вы можете увидеть метод InitializeComponent и как он вызывает LoadComponent ... и многое другое.

Comments

    Ничего не найдено.