2011-05-06 8 views
6

संभव डुप्लिकेट:
Datatemplate inheritanceडब्ल्यूपीएफ में आप एक डेटा टेम्पलेट को दूसरे पर आधारित कर सकते हैं जैसे आप स्टाइल के साथ कर सकते हैं?

मैं कई डेटा प्रकार है कि उपवर्गों नहीं हैं, न ही वे एक अंतरफलक साझा करते हैं, लेकिन वे आम गुणों है कि मैं एक में प्रदर्शित करना चाहते हैं की क्या ज़रूरत है एक्सएएमएल डेटा टेम्पलेट। जिसके अनुसार, मैं जानता हूँ कि यह संभव है ...

<!-- Basic Style Inheritance --> 
<Style x:Key="FooStyle" TargetType="Foo" /> 
<Style x:Key="EnhancedFooStyle" TargetType="Foo" BasedOn="{StaticResource FooStyle}" /> 

<!-- Inheritance By Type --> 
<Style x:Key="BaseItemStyle"> 
    <Setter Property="Control.Background" Value="Yellow" /> 
</Style> 

<!-- These three data types share the same 'BaseItemStyle' --> 
<Style TargetType="ListBoxItem" BasedOn="{StaticResource BaseItemStyle}" /> 
<Style TargetType="ComboBoxItem" BasedOn="{StaticResource BaseItemStyle}" /> 
<Style TargetType="TreeViewItem" BasedOn="{StaticResource BaseItemStyle}" /> 

लेकिन डेटा टेम्पलेट्स के लिए इस तरह कुछ इसी तरह जो BasedOn संपत्ति की जरूरत नहीं है कर सकते हैं?

<DataTemplate x:Key="CommonTemplate"> 
    <!-- Common Stuff Goes Here --> 
</DataTemplate> 

<!-- These three datatypes share the same DataTemplate --> 
<DataTemplate DataType="Foo1" BasedOn="{StaticResource CommonTemplate}" /> 
<DataTemplate DataType="Foo2" BasedOn="{StaticResource CommonTemplate}" /> 
<DataTemplate DataType="Foo3" BasedOn="{StaticResource CommonTemplate}" /> 

मैं जानता हूँ कि BasedOn नहीं है क्या हम यहाँ चाहते हैं क्योंकि यह नहीं है बल्कि 'पर आधारित' इस परिदृश्य में 'है', लेकिन यह कैसे करना है विशुद्ध रूप से XAML में यकीन नहीं। मैं इस लिख रहा हूँ के रूप में, मैं एक विचार है, लेकिन मैं UserControl धोखा दे रही है का उपयोग कर लग रहा है ...

<UserControl x:Key="CommonTemplate" x:Shared="False"> 
    <!-- Common Stuff Goes Here --> 
</UserControl> 

<!-- These three datatypes share the same DataTemplate --> 
<DataTemplate DataType="Foo1" BasedOn="{StaticResource CommonTemplate}"> 
    <StaticResource ResourceKey="CommonTemplate" /> 
</DataTemplate> 

<DataTemplate DataType="Foo2" BasedOn="{StaticResource CommonTemplate}" /> 
    <StaticResource ResourceKey="CommonTemplate" /> 
</DataTemplate> 

<DataTemplate DataType="Foo3" BasedOn="{StaticResource CommonTemplate}" /> 
    <StaticResource ResourceKey="CommonTemplate" /> 
</DataTemplate> 

धन्यवाद!

उत्तर

4

पोस्टिंग से पहले इतना सर्च कर रहे हैं अपने दोस्त है,)

Is there a way to use data-template inheritance in WPF?

+0

आप जानते हैं ... मैंने खोज की थी! मैंने 'संबंधित' खंड में भी देखा और यह वहां भी नहीं आया। फिर भी, धन्यवाद! यही वही है जो मैं ढूंढ रहा था। सामग्री प्रदाता को भी विचार नहीं किया जो कि इस बात पर विचार कर रहा है कि मैं कहीं और इसका उपयोग कैसे करता हूं। किंडा भयानक है कि वास्तव में कितना सरल और सुरुचिपूर्ण है (और उपयोगकर्ताकोन्ट्रोल चीज़ की तुलना में बहुत बेहतर है जो मैं सोच रहा था।) – MarqueIV

5

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

<Border x:Shared="False" x:Key="Foo" BorderBrush="Red" BorderThickness="1" CornerRadius="4"> 
    <TextBlock Text="{Binding SomeProp}" /> 
</Border> 

<DataTemplate x:Key="TemplateA"> 
    <ContentPresenter Content="{StaticResource Foo}" /> 
</DataTemplate> 

<DataTemplate x:Key="TemplateB"> 
    <ContentPresenter Content="{StaticResource Foo}" /> 
</DataTemplate> 

महत्वपूर्ण: अपने साझा की गई सामग्री पर x:Shared विशेषता का उपयोग करना सुनिश्चित करें या इस काम नहीं करेगा।

एम

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

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