2010-05-01 22 views
5

मेरे पास एक कस्टम नियंत्रण है जिसमें एक सामग्री प्रतिनिधि है जिसमें सामग्री के रूप में एक मनमानी ऑब्जेक्ट सेट होगा। इस ऑब्जेक्ट में इसके प्रकार पर कोई बाधा नहीं है, इसलिए मैं इस नियंत्रण को एप्लिकेशन द्वारा परिभाषित किसी भी डेटा टेम्पलेट्स या जेनेरिक.एक्सएएमएल में परिभाषित डेटा टेम्पलेट्स के आधार पर अपनी सामग्री प्रदर्शित करना चाहता हूं। यदि किसी एप्लिकेशन में मैं कुछ डेटा टेम्पलेट को परिभाषित करता हूं (बिना कुंजी के क्योंकि मैं इसे उस प्रकार की ऑब्जेक्ट्स पर स्वचालित रूप से लागू करना चाहता हूं) और मैं उस प्रकार की ऑब्जेक्ट पर कस्टम कंट्रोल का उपयोग करता हूं, तो डेटा टेम्पलेट स्वचालित रूप से लागू हो जाता है। लेकिन मेरे पास जेनेरिक.एक्सएमएल में कुछ प्रकार के लिए परिभाषित कुछ डेटा टेम्पलेट्स हैं जहां मैं कस्टम नियंत्रण शैली को परिभाषित करता हूं, और ये टेम्पलेट स्वचालित रूप से लागू नहीं हो रहे हैं। {X: प्रकार:जेनेरिक.एक्सएएमएल में डेटा टेम्पलेट्स स्वचालित रूप से कैसे लागू हो सकते हैं?

< DataTemplate datatype = "- - टेम्पलेट परिभाषा > <DataTemplate>

< शैली TargetType = प्रकार PredefinedType > < {x:" यहाँ generic.xaml है CustomControl} "> < - नियंत्रण शैली - > </स्टाइल >

यदि मैं सामग्री प्रस्तुति में सामग्री के रूप में 'पूर्वनिर्धारित प्रकार' प्रकार का ऑब्जेक्ट सेट करता हूं, तो डेटा टेम्पलेट लागू नहीं होता है। हालांकि, अगर यह कस्टम नियंत्रण का उपयोग करने वाले एप्लिकेशन के लिए app.xaml में डेटा टेम्पलेट को परिभाषित करता है तो यह काम करता है।

क्या किसी को कोई सुराग मिला है? मैं वास्तव में यह नहीं मान सकता कि नियंत्रण का उपयोगकर्ता इस डेटा टेम्पलेट को परिभाषित करेगा, इसलिए मुझे कस्टम नियंत्रण के साथ इसे जोड़ने के लिए कुछ तरीका चाहिए।

उत्तर

4

जेनेरिक.एक्सएएमएल में घोषित संसाधन केवल तभी खींचे जाते हैं जब उन्हें सीधे नियंत्रण पर लागू होने वाले टेम्पलेट द्वारा संदर्भित किया जाता है (आमतौर पर एक स्टेटिक रिसोर्स संदर्भ द्वारा)। इस मामले में आप प्रत्यक्ष संदर्भ स्थापित नहीं कर सकते हैं, इसलिए आपको अपने नियंत्रण टेम्पलेट के साथ डेटा टेम्पलेट को पैकेज करने के लिए किसी अन्य विधि का उपयोग करने की आवश्यकता है। आप ControlTemplate.Resources की तरह उन्हें एक और अधिक स्थानीय संसाधन संग्रह में शामिल करके ऐसा कर सकते हैं,:

<Style TargetType="{x:Type local:MyControl}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type local:MyControl}"> 
       <ControlTemplate.Resources> 
        <DataTemplate DataType="{x:Type local:MyDataObject}"> 
         <TextBlock Text="{Binding Name}"/> 
        </DataTemplate> 
       </ControlTemplate.Resources> 
       <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" 
         Padding="{TemplateBinding Padding}" Background="{TemplateBinding Background}"> 
        <ContentPresenter/> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
+0

जॉन सही जवाब के लिए अच्छी तरह से काम किया, धन्यवाद –

+0

:) इसके अलावा, आप ला सकते हैं आप टेम्पलेट्स कहीं और उपयोग करने की आवश्यकता है, तो उन्हें नियंत्रण टेम्पलेट संसाधनों में एक और XAML फ़ाइल से मर्ज किए गए शब्दकोश में मिलाया गया। यह आपको जेनेरिक.एक्सएमएल और अन्य स्थानों दोनों में टेम्पलेट का पुन: उपयोग करने की अनुमति देता है। –