Що робить 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 ... та багато іншого.