สิ่งที่ไม่InitializeComponent()
ทำและวิธีการที่ไม่ได้ทำงานใน WPF?
โดยทั่วไปก่อนอื่น แต่โดยเฉพาะอย่างยิ่งฉันจะสนใจที่จะรู้รายละเอียดเต็มไปด้วยเลือดของคำสั่งของการก่อสร้างและสิ่งที่จะเกิดขึ้นเมื่อมีคุณสมบัติที่แนบมา
สิ่งที่ไม่InitializeComponent()
ทำและวิธีการที่ไม่ได้ทำงานใน WPF?
โดยทั่วไปก่อนอื่น แต่โดยเฉพาะอย่างยิ่งฉันจะสนใจที่จะรู้รายละเอียดเต็มไปด้วยเลือดของคำสั่งของการก่อสร้างและสิ่งที่จะเกิดขึ้นเมื่อมีคุณสมบัติที่แนบมา
คำตอบ:
การเรียกไปที่InitializeComponent()
(ซึ่งโดยปกติจะเรียกในตัวสร้างเริ่มต้นอย่างน้อยWindow
และUserControl
) จริง ๆ แล้วเป็นวิธีการโทรไปที่คลาสบางส่วนของการควบคุม (แทนที่จะเรียกลำดับชั้นของวัตถุตามที่ฉันคาดไว้ครั้งแรก)
เมธอดนี้หาตำแหน่ง URI ไปที่ XAML สำหรับWindow
/ UserControl
ที่กำลังโหลดและส่งผ่านไปยังSystem.Windows.Application.LoadComponent()
เมธอดสแตติก LoadComponent()
โหลดไฟล์ XAML ที่อยู่ที่ผ่านไปใน URI และแปลงเป็นอินสแตนซ์ของวัตถุที่ระบุโดยองค์ประกอบหลักของไฟล์ XAML
ในรายละเอียดเพิ่มเติมLoadComponent
สร้างตัวอย่างของXamlParser
และสร้างต้นไม้ของ XAML XamlParser.ProcessXamlNode()
แต่ละโหนดจะแยกกันโดย สิ่งนี้จะถูกส่งผ่านไปยังBamlRecordWriter
ชั้นเรียน หลังจากนี้สักครู่ฉันก็หลงทางว่า BAML ถูกเปลี่ยนเป็นวัตถุอย่างไร แต่มันอาจจะเพียงพอที่จะช่วยคุณในเส้นทางสู่การรู้แจ้ง
หมายเหตุ: ที่น่าสนใจInitializeComponent
คือวิธีการบนSystem.Windows.Markup.IComponentConnector
อินเตอร์เฟสซึ่งWindow
/ UserControl
นำไปใช้ในคลาสที่สร้างขึ้นบางส่วน
หวังว่านี่จะช่วยได้!
การดูรหัสก็ช่วยได้เช่นกัน นั่นคือคุณสามารถดูคลาสที่สร้างขึ้นบางส่วน (ที่เรียกLoadComponent ) โดยทำสิ่งต่อไปนี้:
YourClass .g.cs ... เป็นรหัสสำหรับการเรียนบางส่วนที่สร้างขึ้น อีกครั้งถ้าคุณเปิดขึ้นคุณสามารถดูวิธีการ InitializeComponent และวิธีที่มันเรียก LoadComponent ... และอีกมากมาย