2008-10-29 14 views
139

InitializeComponent() क्या करता है, और यह WPF में कैसे काम करता है?InitializeComponent() क्या करता है, और यह WPF में कैसे काम करता है?

सामान्य रूप से पहले, लेकिन मैं विशेष रूप से निर्माण के आदेश के बारे में जानना चाहता हूं, और संलग्न गुण होने पर क्या होता है।

+2

धन्यवाद, मुझे लगता है कि ये नीचे बहुत अच्छे जवाब हैं! किसी ने भी अटैचडप्रॉपर्टीज का बिल्कुल उल्लेख नहीं किया है, लेकिन अब मुझे पता है कि एक्सएएमएल में किसी भी संलग्नप्रॉपर्टीज को एक्समल पार्सिंग के हिस्से के रूप में बनाया गया है, इसलिए वे वास्तव में विशेष उल्लेख के लायक नहीं हैं। –

उत्तर

136

कॉल InitializeComponent() को (जो आमतौर पर कम से कम Window और UserControl के डिफ़ॉल्ट निर्माता में कहा जाता है) वास्तव में नियंत्रण (बजाय के रूप में मैं पहले की उम्मीद वस्तु पदानुक्रम एक फोन तक) की आंशिक वर्ग के लिए एक विधि कॉल है ।

यह विधि Window/UserControl के लिए XAML में यूआरआई को ढूंढती है जो लोड हो रही है, और इसे System.Windows.Application.LoadComponent() स्थैतिक विधि में भेजती है। LoadComponent() यूआरआई में पारित XAML फ़ाइल लोड करता है, और इसे XAML फ़ाइल के मूल तत्व द्वारा निर्दिष्ट ऑब्जेक्ट के उदाहरण में परिवर्तित करता है।

अधिक जानकारी में, LoadComponentXamlParser का एक उदाहरण बनाता है, और XAML का एक पेड़ बनाता है। प्रत्येक नोड को XamlParser.ProcessXamlNode() द्वारा पार्स किया जाता है। यह BamlRecordWriter कक्षा में पारित हो जाता है। इसके कुछ समय बाद मुझे बीएएमएल वस्तुओं में परिवर्तित करने में थोड़ा सा खो गया, लेकिन यह ज्ञान के मार्ग पर आपकी मदद करने के लिए पर्याप्त हो सकता है।

नोट: दिलचस्प है, InitializeComponentSystem.Windows.Markup.IComponentConnector इंटरफ़ेस है, जो की Window/UserControl आंशिक उत्पन्न कक्षा में लागू पर एक विधि है।

आशा है कि इससे मदद मिलती है!

+1

BamlRecordWriter क्या है? मुझे वह कक्षा कहीं भी नहीं मिल सकती है ... – flq

+0

@ ब्रैड, आप कैसे इंटरफ़ेस प्रारंभिक कॉम्पोनेंट में परिभाषित किया गया है? .xaml.cs फ़ाइल कॉल में कॉल पर F1 सहायता .g.cs या .g.i.cs फ़ाइल में "पृष्ठ नहीं मिला" की ओर जाता है जबकि Microsoft.SPOT.Emulator.EmulatorComponent क्लास की ओर जाता है। मैं डब्ल्यूपीएफ के लिए नया हूँ। क्या यह विधि निर्माण समय पर उत्पन्न हुई है? – Vimes

+0

@ АртёмЦарионов कन्स्ट्रक्टर में प्रारंभिक कॉम्पोनेंट को कॉल करने के बिना, नियंत्रण XAML में प्रदर्शित या प्रदर्शित नहीं होगा जिसमें यह स्थित है। – Jason

20

कोड को देखते हुए हमेशा भी मदद करता है। यही कारण है, आप वास्तव में (कि LoadComponent कॉल) उत्पन्न आंशिक वर्ग पर एक नज़र ले जा सकते हैं निम्न करके:।

    दृश्य स्टूडियो समाधान है कि आप में रुचि रखते हैं में समाधान एक्सप्लोरर फलक को
  1. जाओ
  2. 'सभी फ़ाइलें दिखाएं' नामक समाधान एक्सप्लोरर के टूल बार में एक बटन है। उस बटन को टॉगल करें।
  3. अब, obj फ़ोल्डर और फिर डीबग या रिलीज फ़ोल्डर (या जो भी विन्यास आप निर्माण कर रहे हैं) का विस्तार करने और आप YourClass .g.cs शीर्षक से एक फ़ाइल को नहीं देखेंगे।

YourClass .g.cs ... उत्पन्न आंशिक वर्ग के लिए कोड है। दोबारा, यदि आप इसे खोलते हैं तो आप InitializeComponent विधि और यह लोडकंपोनेंट को कैसे कॉल कर सकते हैं ... और बहुत कुछ।

+12

ध्यान दें कि आप इसे कन्स्ट्रक्टर में विधि कॉल पर राइट क्लिक करके और "परिभाषा पर जाएं" चुनकर एक चरण में ऐसा कर सकते हैं। –

+1

आह, यह सही है ... इसके बारे में भूल गया। इस तरह से बहुत आसान है। खैर, कम से कम आप जानते हैं कि यह परियोजना में कैसे शामिल है। मुसकान। – cplotts

+1

@ ब्रैड लीच, इस पार्टी के लिए देर हो चुकी है, आप इसे एफ 12 के साथ कर सकते हैं –

संबंधित मुद्दे