wpf - How Can I Nest Custom XAML Elements? -


  & lt; विंडो x: कक्षा = "WpfApplication1.Window1" xmlns = "http://schemas.microsoft Com / winfx / 2006 / xaml / प्रस्तुति "xmlns: x =" http://schemas.microsoft.com/winfx/2006/xaml "xmlns: स्थानीय =" clr-namespace: WpfApplication1 "शीर्षक =" विंडो 1 "& gt; & LT; ग्रिड & gt; & Lt; स्थानीय: एलीमेंटटाइप x: नाम = "प्रथम एलेमेंटनाम" & gt; & Lt; स्थानीय: एलीमेंटटाइप x: नाम = "सेकंडएलेमेंटनाम" ग्रिड। कॉलम = "1" ग्रिड। राउ = "1" / & gt; & Lt; / स्थानीय: elementType & gt; & Lt; / ग्रिड & gt; & Lt; / विंडो & gt;  

और यह अन्य फाइलों में है ...

  & lt; ग्रिड एक्स: नाम = "आंतरिकएलेमेंटनाम" x: वर्ग = "WpfApplication1.ElementType" xmlns = "Http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns: x = "http://schemas.microsoft.com/winfx/2006/xaml" xmlns: स्थानीय = "clr-namespace: WpfApplication1 "& gt; & Lt; / ग्रिड & gt;  

और ...

  सार्वजनिक आंशिक कक्षा एलिमेंट टाईप: System.Windows.Controls.Grid {}  

दूसरा तत्व दूसरे को छोड़कर, सबकुछ ठीक काम करता है।
मुझे त्रुटि मिलती है:
तत्व विशेषता तत्व 'ElementType' पर नाम विशेषता मान सेट नहीं किया जा सकता है 'एलीमेंटटाइप' तत्व 'ElementType' के दायरे के अंतर्गत है, जो पहले से ही एक नाम दर्ज किया गया था जब इसे किसी अन्य दायरे में परिभाषित किया गया था।

कस्टम ग्रिड्स को ठीक से परिभाषित किया गया है। कोड संकलित और चलाएगा यदि मैं संपत्ति लेता हूं ---

  x: name = "secondElementName"  

--- विंडो 1 में। Xaml

इस त्रुटि का कारण क्या है? मैं इसे कैसे प्राप्त करूं? मुझे एक दूसरे के अंदर इन कस्टम ग्रिडों में से घोंसला करने की आवश्यकता है, और मुझे उन दोनों पर नाम चाहिए, इसलिए मैं उन्हें अलग-अलग डेटा में बाँध सकता हूं।

अग्रिम धन्यवाद।

नेस्टेड मार्कअप के साथ क्या करना है यह जानने के लिए ऑब्जेक्ट्स, एक्सएएमएल पार्सर, अन्य बातों के अलावा, देखें कि क्या एनआईटी क्लास ऐसे बच्चों के कंटेनर के रूप में उपयोग करने के लिए डिफ़ॉल्ट "कंटेंट" प्रॉपर्टी को परिभाषित करता है। यह "कंटेंटप्रॉपर्टी एट्रिब्यूट" के साथ किया जाता है।

आपके मामले में, चूंकि मुझे लगता है कि आप नेस्टेड ऑब्जेक्ट्स ग्रिड के अंदर जाने के लिए चाहते हैं, और चूंकि ग्रिड के बच्चों "बच्चों" संपत्ति संग्रह में जाते हैं, आप बस निम्नलिखित करने की जरूरत है:

  [ContentProperty ("बच्चे")] सार्वजनिक आंशिक कक्षा एलिमेंट टाईप: ग्रिड {// आपका कोड यहाँ ...}  
< P> अगर आपको अपने नियंत्रण में बच्चों को जोड़ते समय कुछ तर्क करने की आवश्यकता होती है (उदाहरण के लिए केवल कुछ प्रकार आपके एलिमेंटटीप कंट्रोल के बच्चे होने की अनुमति देते हैं), आप इसके बजाय IAddChild से वारिस कर सकते हैं, और AddChild और AddText विधियों को कार्यान्वित कर सकते हैं।

< नामकरण की समस्या के लिए, ऐसा लगता है कि केवल बेजान नियंत्रणों ने बच्चों को एक instanced गुंजाइश में नाम दिया है। तो मूल रूप से, आप एलिमेंट टाईप.एक्सएमएल के अंदर बच्चों को नामांकित कर सकते हैं, लेकिन अन्य मार्कअप में बच्चों का नाम नहीं दिया गया है, जहां आप एलिमेंट टाईप को इन्स्तांत करते हैं। मुझे लगता है कि जिस तरह से वे तार्किक पेड़ या कुछ का अनुकूलन करते हैं एक लापरवाह नियंत्रण, दूसरी ओर, केवल कोड के साथ एक नियंत्रण है इसलिए यदि आप अपनी कक्षा को ग्रिड के एक खाली पुराने खाली उप-वर्ग में बदल देते हैं, तो यह काम करता है:

  सार्वजनिक वर्ग एलिमेंट टाईप: ग्रिड {}  

यै! कम कोड!


Comments

Popular posts from this blog

c# - ListView onScroll event -

PHP - get image from byte array -

Linux Terminal Problem with Non-Canonical Terminal I/O app -