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

155
задан Danny Beckett 3 August 2014 в 03:39
поделиться

2 ответа

Вызов к InitializeComponent() (который обычно называют в конструкторе по умолчанию [по крайней мере 111] и 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 реализация в частичном сгенерированном классе.

Hope это помогает!

152
ответ дан Danny Beckett 23 November 2019 в 21:58
поделиться

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

  1. Переходят к области Solution Explorer в решении для Visual Studio, которым Вы интересуетесь.
  2. существует кнопка на панели инструментов Проводника Решения, названного 'Шоу Все Файлы'. Переключите ту кнопку.
  3. Теперь, расширьтесь папка obj и затем Отладка или папка Release (или безотносительно конфигурации, которую Вы создаете), и Вы будете видеть, что файл назвал YourClass.g.cs.

YourClass.g.cs... является кодом для сгенерированного частичного класса. Снова при открытии этого, Вы видите метод InitializeComponent и как он называет LoadComponent... и многое другое.

24
ответ дан cplotts 23 November 2019 в 21:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: