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.
c#
.net
wpf
attached-properties
Tim Lovell-Smith
źródło
źródło
Odpowiedzi:
Wywołanie
InitializeComponent()
(które jest zwykle wywoływane w domyślnym konstruktorze co najmniejWindow
iUserControl
) 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 doSystem.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ąpienieXamlParser
i kompiluje drzewo XAML. Każdy węzeł jest analizowany przezXamlParser.ProcessXamlNode()
. To jest przekazywaneBamlRecordWriter
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 metodaSystem.Windows.Markup.IComponentConnector
interfejsu, którejWindow
/UserControl
implementuje się w częściowo wygenerowanej klasie.Mam nadzieję że to pomoże!
źródło
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.
źródło