2010-01-27 12 views
8

मान लीजिए कि हमारे पास Control के लिए बहुत 'XAML लंबा' ControlTemplate है। और हम को टेम्पलेट पर केवल 1 बटन जोड़ने के लिए चाहते हैं। एमएसडीएन का दावा है कि 'नियंत्रण' के दृश्य पेड़ के केवल एक हिस्से को प्रतिस्थापित करने का कोई तरीका नहीं है। क्या मुझे वास्तव में उस सभी नियंत्रण टेम्पलेट की प्रतिलिपि बनाना है और इसमें मेरा बटन जोड़ना है?WPF ControlTemplate आंशिक प्रतिस्थापित

या: क्या कोई संभावना है कि किसी विशिष्ट तत्व को किसी प्रकार का इंटरफ़ेस कैसे प्रदान किया जाए? उदाहरण के लिए एक टेक्स्टबॉक्स, ताकि संपूर्ण नियंत्रण टेम्पलेट को दोबारा बताने के बिना हर कोई इसे आसानी से टेम्पलेट कर सके।

धन्यवाद!

+0

क्यों नहीं, ओह, मुझे पता नहीं ... टेम्पलेट पर बटन जोड़ें? – Will

+0

क्योंकि समाधान उस नियंत्रण का उपयोग करता है और प्रत्येक प्रोजेक्ट तय करता है कि बटन क्या जोड़ना है –

उत्तर

7

qntmfred के रूप में कहा गया है, आप इसे सीधे नहीं कर सकते हैं। हालांकि, अगर आपके पास उस नियंत्रण का स्वामित्व है जिसे आप कस्टमाइज़ करना चाहते हैं (जो यह आपके जैसा लगता है), तो आप कस्टम अनुकूलन गुणों जैसे उपयुक्त अनुकूलन गुण जोड़कर ऐसा कर सकते हैं (जो नियंत्रण के प्रत्येक उपयोगकर्ता को अपना बटन जोड़ सकता है) या एक एक्सटेंशन सामग्री संपत्ति (जो नियंत्रण के प्रत्येक उपयोगकर्ता को जो भी सामग्री चाहिए वो सेट कर सकती है - इसे खाली छोड़ दें, एक नियंत्रण जोड़ें, या उस पर जितनी चीजें चाहें उतनी चीजें जोड़ें)। आपका कंट्रोल टेम्पलेट इन गुणों के लिए कोई अर्थशास्त्र नहीं देगा, लेकिन उन्हें होस्ट करें क्योंकि उन्हें दिया गया था। उदाहरण के लिए, मान लें कि आपने एक एक्सटेंशन सामग्री प्रदान की है। आपका ControlTemplate इस उपस्थित हो सकते हैं एक ContentPresenter का उपयोग कर:

<ContentPresenter ContentSource="ExtensionContent" /> 

और अपने उपयोगकर्ताओं को शामिल कर सकता है जो कुछ भी वे इसे में चाहता था:

<s:StefansControl> 
    <s:StefansControl.ExtensionContent> 
    <StackPanel Orientation="Horizontal"> 
     <TextBlock Text="I'm custom content" /> 
     <Button Click="DoSomethingSurprising_Click">Click me</Button> 
     <Image Source="something.jpg" /> 
    </StackPanel> 
    </s:StefansControl.ExtensionContent> 
</s:StefansControl> 

एक और संभवतः शैली गुण है कि आप अपने नियंत्रण के कुछ हिस्सों इतना करने के लिए लागू प्रदान करना है कि उपयोगकर्ता उन्हें स्टाइल कर सकते हैं (पूरे शैली/टेम्पलेट को प्रतिस्थापित किए बिना के उस भाग को (केवल) नियंत्रण के टेम्पलेट को बदलकर)। यह आपके "इंटरफेस के लिए एक विशिष्ट तत्व" विचार है। एक FooBoxStyle प्रॉपर्टी प्रदान करें जो "foo" टेक्स्टबॉक्स पर लागू होती है।

संक्षेप में, विचार आधार टेम्पलेट में "आंशिक प्रतिस्थापन" का एक निश्चित उपाय बनाना है - चाहे सामग्री, शैलियों, टेम्पलेट्स या इनके संयोजन का उपयोग करके। डब्ल्यूपीएफ "आंशिक प्रतिस्थापन" की एक सामान्य धारणा प्रदान नहीं करता है, लेकिन आप आंशिक प्रतिस्थापन की अपनी विशिष्ट धारणा प्रदान कर सकते हैं बशर्ते आप भविष्यवाणी कर सकें कि किस तरह के आंशिक प्रतिस्थापन की आवश्यकता हो सकती है।

0

एमएसडीएन सही है। पूरे ControlTemplate की प्रतिलिपि बनाना होगा।

0

वास्तव में आप कर सकते हैं। यह सबसे आरामदायक तरीका नहीं है, लेकिन यहां यह है कि आप इसे कैसे करते हैं: Cloning a WPF ControlTemplate

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