Що робить InitializeComponent()
і як це працює у WPF?
Загалом спочатку, але мені було б особливо цікаво дізнатись про найрізноманітніші деталі порядку будівництва та що відбувається, коли є додані властивості.
Що робить InitializeComponent()
і як це працює у WPF?
Загалом спочатку, але мені було б особливо цікаво дізнатись про найрізноманітніші деталі порядку будівництва та що відбувається, коли є додані властивості.
Відповіді:
Виклик до 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 ... та багато іншого.