2010-01-09 17 views
14

मैं एक WPF प्रोजेक्ट पर काम कर रहा हूं जहां मैंने कुछ विशेष परिचालनों के लिए CheckBox नियंत्रण को अधिक से अधिक सवार कर दिया है। यह सही ढंग से काम कर रहा है।एक नियंत्रण टेम्पलेट को कैसे घुमाएं

मेरी समस्या यह है कि ControlTemplate जो विषय (shplered.xaml को codeplex से) से लागू किया गया था, मेरे अति-नियंत्रित नियंत्रण पर लागू नहीं है। क्या मेरे नए नियंत्रण द्वारा उपयोग के लिए CheckBoxControlTemplate का उत्तराधिकारी करने का कोई तरीका है?

मुझे जो नमूने मिल सकते हैं वे CheckBox के लिए शैली को विरासत में केंद्रित करने पर केंद्रित हैं, लेकिन ControlTemplate के बारे में कुछ भी नहीं।

उत्तर

17

नहीं, जैसा कि आपने कहा है कि BasedOn संपत्ति का उपयोग कर शैली को 'उत्तराधिकारी' बनाना संभव है, लेकिन सीधे टेम्पलेट को 'विरासत' प्राप्त करना संभव नहीं है। हालांकि यह समझ में आता है, टेम्पलेट विरासत का अर्थशास्त्र क्या होगा? व्युत्पन्न टेम्पलेट बेस टेम्पलेट में तत्वों को किसी भी तरह जोड़ने या बदलने में सक्षम कैसे होगा?

शैलियों के साथ यह पूरी तरह से संभव है, क्योंकि आप आसानी से Setters, Triggers आदि जोड़ सकते हैं। एकमात्र चीज जो टेम्पलेट विरासत के साथ संभवतः संभव हो सकती है, आधार टेम्पलेट में Triggers जोड़ रही है। हालांकि, उस स्थिति में आपको मूल टेम्पलेट में तत्व नामों का अंतरंग ज्ञान होना चाहिए, और मूल टेम्पलेट में तत्व नाम परिवर्तन आपके व्युत्पन्न को तोड़ सकता है। पठनीयता के साथ किसी मुद्दे का उल्लेख नहीं करना है, जहां आप अपने व्युत्पन्न टेम्पलेट में एक नाम का उल्लेख करते हैं, जिसे कहीं और पूरी तरह परिभाषित किया गया है।

बेल्टेड एडिशन यह सब कहकर, आपकी विशेष समस्या को हल करना संभव है (हालांकि अब मुझे संदेह है कि यह अभी भी आपका है, या यहां तक ​​कि एक समस्या भी है)। आप Template संपत्ति के लिए एक सेटटर के साथ अपने नियंत्रण के लिए शैली को परिभाषित करते हैं:

<Style TargetType="<your type>"> 
    <Setter Property="Template" Value="{StaticResource <existing template resource name>}"/> 
</Style> 
संबंधित मुद्दे