2011-01-24 16 views
5

लौटाता है मैं GetTemplateChild का पालन कर रहा हूं, लेकिन यह हमेशा शून्य देता है। इसे कैसे ठीक करें?GetTemplateChild हमेशा शून्य

[TemplatePart(Name = "textPoints", Type = typeof(TextBlock))] 
textPoints = (TextBlock)GetTemplateChild("TextBlock"); 
+0

क्या आपको कभी इसका समाधान मिला? _Reed Copsey_ का उत्तर आपके द्वारा प्रदान की गई जानकारी के लिए सही है, लेकिन यदि यह अभी भी काम नहीं कर रहा है तो शायद आप अपना नियंत्रण टेम्पलेट पोस्ट कर सकते हैं क्योंकि इसमें त्रुटि हो सकती है। –

+1

मेरे अनुभव में, 'FrameworkElement.GnTemplateChild()' को 'FrameworkElement.OnApplyTemplate()' से पहले कॉल करना सुरक्षित नहीं है। नियंत्रण को उपclassing और 'OnApplyTemplate() 'ओवरराइड करने का प्रयास करें। – kevinarpe

उत्तर

4

GetTemplateChild एक पैरामीटर, नहीं प्रकार के रूप में नाम लेता है। के बाद से अपने XAML के रूप में परिभाषित किया गया है:

<TextBlock Text="{Binding}" Foreground="Cyan" 
    x:Name="textPoints" 

"textPoints" पुनः प्राप्त करने के नाम के रूप में "TextBlock" के बजाय गुजर का प्रयास करें:

[TemplatePart(Name = "textPoints", Type = typeof(TextBlock))] 
textPoints = (TextBlock)GetTemplateChild("textPoints"); 
+0

Thnaks, मैंने नीचे कोड के साथ प्रयास किया, मुझे अभी भी एक ही परिणाम मिल रहा है (i.e, NULL) textPoints = (TextBlock) GetTemplateChild ("textPoints"); क्या मुझे कुछ पतला याद आ रहा है? – codematrix

+0

नहीं, नीचे दी गई विधि में, सार्वजनिक ओवरराइड ऑनऑप्ली टेम्पलेट()। अन्य GetTemplateChilds काम कर रहे हैं। मुझे केवल इस टेक्स्टब्लॉक के लिए समस्या है। यह का हिस्सा है। GetTemplateChild() इस मामले में काम करेगा? – codematrix

2

ऐसा लगता है कि कुछ अन्य नियंत्रण से टेम्पलेट बच्चा पाने के लिए कोशिश कर रहे हैं कि आप कहां से GetTemplateChild को बुला रहे हैं?

यदि आपका आइटम नियंत्रण कुछ उपयोगकर्ता नियंत्रण के अंदर है तो GetTemplateChild काम नहीं करेगा क्योंकि आपके UserControl के बच्चे टेम्पलेट बच्चे का हिस्सा नहीं हैं और यह हर बच्चे के टेम्पलेट बच्चे को फिर से खोज नहीं करेगा।

अधिकतर GetTemplateChild कस्टम नियंत्रण में उपयोग किया जाता है।

+0

उपरोक्त कोड को देखें, यह x के लिए काम करता है: नाम = "पॉइंटलिस्ट" लेकिन एक्स नहीं: नाम = "टेक्स्ट पॉइंट्स"। क्या आप कुछ प्रकाश डाल सकते हैं? GetTemplateChild() इस मामले में काम करेगा? – codematrix

+0

नहीं, यह काम नहीं करेगा, क्योंकि GetTemplateChild केवल मौजूदा टेम्पलेट में नामित बच्चे की तलाश करेगा, आपका टेक्स्टबॉक्स कर्नी टेम्पलेट के अंदर नहीं है यह टेम्पलेट बच्चे के टेम्पलेट के अंदर है। आपको आइटम्स कंट्रोल से व्युत्पन्न एक और कस्टम नियंत्रण बनाना होगा, हालांकि यदि आपका नियंत्रण आइटम टेम्पलेट के अंदर है तो आपको अलग कस्टम नियंत्रण के रूप में आइटम कंटेनर भी बनाना होगा। –

+0

टेम्पलेट बच्चा वर्तमान नियंत्रण के लिए निजी तत्व का प्रकार है, केवल माता-पिता के स्वामित्व वाले टेम्पलेट टेम्पलेट बच्चे तक पहुंच सकते हैं, हालांकि आप VisualTree पर नेविगेट कर सकते हैं और कहीं भी बाल नियंत्रण तक पहुंच सकते हैं। इसके अलावा आइटम्स कंट्रोल में प्रत्येक आइटम के लिए एक ही नाम के साथ कई नियंत्रण होंगे, तो GetTemplateChild किस आइटम को वापस करेगा? –

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