Apa yang InitializeComponent()
dilakukan, dan bagaimana cara kerjanya di WPF?
Secara umum pertama, tapi saya terutama akan tertarik untuk mengetahui detail berdarah dari urutan konstruksi, dan apa yang terjadi ketika ada Properti Terlampir.
c#
.net
wpf
attached-properties
Tim Lovell-Smith
sumber
sumber
Jawaban:
Panggilan ke
InitializeComponent()
(yang biasanya dipanggil dalam konstruktor default setidaknyaWindow
danUserControl
) sebenarnya adalah pemanggilan metode ke kelas parsial dari kontrol (daripada memanggil hierarki objek seperti yang saya harapkan pertama kali).Metode ini menempatkan URI ke XAML untuk
Window
/UserControl
yang memuat, dan meneruskannya keSystem.Windows.Application.LoadComponent()
metode statis.LoadComponent()
memuat file XAML yang terletak di lulus dalam URI, dan mengubahnya menjadi turunan dari objek yang ditentukan oleh elemen root dari file XAML.Secara lebih rinci,
LoadComponent
membuat instance dariXamlParser
, dan membangun pohon XAML. Setiap node diuraikan olehXamlParser.ProcessXamlNode()
. Ini diteruskan keBamlRecordWriter
kelas. Beberapa waktu setelah ini saya agak bingung bagaimana BAML dikonversi menjadi objek, tetapi ini mungkin cukup untuk membantu Anda di jalan menuju pencerahan.Catatan: Menariknya,
InitializeComponent
ini adalah metode padaSystem.Windows.Markup.IComponentConnector
antarmuka, yang diimplementasikanWindow
/UserControl
di kelas parsial yang dihasilkan.Semoga ini membantu!
sumber
Melihat kode juga selalu membantu. Artinya, Anda dapat melihat kelas parsial yang dihasilkan (yang memanggil LoadComponent ) dengan melakukan hal berikut:
The YourClass .g.cs ... adalah kode untuk kelas parsial yang dihasilkan. Sekali lagi, jika Anda membukanya, Anda dapat melihat metode InitializeComponent dan bagaimana ia memanggil LoadComponent ... dan banyak lagi.
sumber