Co robi InitializeComponent()
i jak to działa w WPF?
Ogólnie rzecz biorąc, najpierw, ale szczególnie chciałbym poznać krwawe szczegóły kolejności budowy i co się dzieje, gdy są dołączone właściwości.
Co robi InitializeComponent()
i jak to działa w WPF?
Ogólnie rzecz biorąc, najpierw, ale szczególnie chciałbym poznać krwawe szczegóły kolejności budowy i co się dzieje, gdy są dołączone właściwości.
Odpowiedzi:
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ę spodziewałem).
Ta metoda lokalizuje identyfikator URI do kodu XAML dla Window
/, UserControl
który jest ładowany, i przekazuje go do System.Windows.Application.LoadComponent()
metody statycznej. LoadComponent()
ładuje plik XAML, który znajduje się w przekazanym identyfikatorze URI, i konwertuje go na wystąpienie obiektu, który jest określony przez element główny pliku XAML.
Bardziej szczegółowo LoadComponent
tworzy wystąpienie XamlParser
i kompiluje drzewo XAML. Każdy węzeł jest analizowany przez XamlParser.ProcessXamlNode()
. To jest przekazywane BamlRecordWriter
klasie. Po jakimś czasie trochę zagubiłem się w tym, jak BAML przekształca się w obiekty, ale to może wystarczyć, aby pomóc ci na ścieżce do oświecenia.
Uwaga: Co ciekawe, InitializeComponent
jest to metoda System.Windows.Markup.IComponentConnector
interfejsu, której Window
/ UserControl
implementuje się w częściowo wygenerowanej klasie.
Mam nadzieję że to pomoże!
Spojrzenie na kod też zawsze pomaga. Oznacza to, że możesz faktycznie przyjrzeć się wygenerowanej klasie częściowej (która wywołuje LoadComponent ), wykonując następujące czynności:
W YourClass .g.cs ... jest kodem wygenerowanym częściowej klasy. Ponownie, jeśli to otworzysz, możesz zobaczyć metodę InitializeComponent i jak wywołuje ona LoadComponent ... i wiele więcej.