สิ่งที่ไม่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 ... และอีกมากมาย