Gọi tới InitializeComponent()
(thường được gọi trong hàm dựng mặc định ít nhất Window
và UserControl
) thực sự là một cuộc gọi phương thức đến lớp một phần của điều khiển (thay vì gọi lên phân cấp đối tượng như tôi đã dự kiến trước) .
Phương pháp này định vị một URI tới XAML cho Window
/UserControl
đang tải và chuyển nó đến phương thức tĩnh System.Windows.Application.LoadComponent()
. LoadComponent()
tải tệp XAML được đặt tại thông qua trong URI và chuyển đổi nó thành một thể hiện của đối tượng được chỉ định bởi phần tử gốc của tệp XAML.
Cụ thể hơn, LoadComponent
tạo một phiên bản XamlParser
và xây dựng một cây XAML. Mỗi nút được phân tích cú pháp theo số XamlParser.ProcessXamlNode()
. Điều này được chuyển đến lớp BamlRecordWriter
. Một thời gian sau này tôi bị lạc một chút trong cách BAML được chuyển đổi thành đồ vật, nhưng điều này có thể đủ để giúp bạn trên con đường dẫn đến chứng ngộ.
Lưu ý: Điều thú vị là, InitializeComponent
là phương thức trên giao diện System.Windows.Markup.IComponentConnector
, trong đó Window
/UserControl
triển khai trong lớp được tạo một phần.
Hy vọng điều này sẽ hữu ích!
Nguồn
2008-10-29 05:21:20
Cảm ơn, tôi nghĩ đây là những câu trả lời khá hay dưới đây! Không ai đề cập đến chính xác AttachedProperties, nhưng bây giờ tôi biết rằng bất kỳ AttachedProperties nào trong Xaml vừa được tạo ra như là một phần của phân tích Xaml, vì vậy chúng không thực sự đáng được đề cập đến đặc biệt. –