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.
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.
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:
- przejdź do okna Solution Explorer w rozwiązaniu Visual Studio, które Cię interesuje.
- na pasku narzędzi Eksploratora rozwiązań znajduje się przycisk "Pokaż wszystkie pliki". Przełącz ten przycisk.
- 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.
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