Co robi InitializeComponent () i jak działa w WPF?

Co robi InitializeComponent() i jak to działa w WPF?

Ogólnie po pierwsze, ale byłbym szczególnie zainteresowany, aby poznać krwawe szczegóły kolejności budowy, i co się dzieje, gdy są dołączone właściwości.

Author: Danny Beckett, 2008-10-29

2 answers

Wywołanie InitializeComponent() (które jest zwykle wywoływane w domyślnym konstruktorze co najmniej Window i UserControl) jest w rzeczywistości wywołaniem metody do częściowej klasy kontrolki(a nie wywołaniem hierarchii obiektów, jak się początkowo spodziewałem).

Ta metoda lokalizuje URI do XAML dla Window/UserControl to jest wczytywanie i przekazuje je do statycznej metody System.Windows.Application.LoadComponent(). LoadComponent() ładuje plik XAML, który znajduje się na przekazanym URI i konwertuje go na instancję obiektu określoną przez główny element pliku XAML.

Bardziej szczegółowo, LoadComponent tworzy instancję XamlParser i buduje drzewo XAML. Każdy węzeł jest przetwarzany przez XamlParser.ProcessXamlNode(). To przechodzi do klasy BamlRecordWriter. Jakiś czas po tym trochę gubię się w tym, jak BAML jest konwertowany na przedmioty, ale może to wystarczyć, aby pomóc ci na drodze do oświecenia.

Uwaga: Co ciekawe, InitializeComponent jest metodą na interfejsie System.Windows.Markup.IComponentConnector, której Window/UserControl zaimplementować w części Wygenerowanej klasy.

Mam nadzieję, że to pomoże!
 140
Author: Brad Leach,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-03 03:41:51

Patrzenie na kod też zawsze pomaga. Oznacza to, że możesz spojrzeć na wygenerowaną klasę częściową (która wywołuje LoadComponent ), wykonując następujące czynności:

  1. przejdź do okna Solution Explorer w rozwiązaniu Visual Studio, które Cię interesuje.
  2. na pasku narzędzi Eksploratora rozwiązań znajduje się przycisk "Pokaż wszystkie pliki". Przełącz ten przycisk.
  3. Teraz rozwiń folder obj , a następnie Debug lub Release folder (lub jakąkolwiek konfigurację budujesz) i zobaczysz plik o nazwie YourClass.g. cs.

The YourClass .g. cs ... jest kodem Wygenerowanej częściowej klasy. Ponownie, jeśli otworzysz to, zobaczysz metodę InitializeComponent i jak ona wywołuje LoadComponent ... i wiele więcej.

 20
Author: cplotts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-29 14:31:03