मेरे पास डब्ल्यूपीएफ में एक फॉर्म है जिसके लिए व्यूमोडेल पर बूलियन गुणों के लिए कई हां/नहीं comboboxes की आवश्यकता है। जैसे, आइटम सूची स्थिर है। हर कॉम्बोक्स के लिए इसे दोहराने के बजाय, मैं इसे एक शैली के साथ हासिल करने की उम्मीद कर रहा था; कुछ इस तरह:

    <Style x:Key="trueFalseCombo" TargetType="{x:Type ComboBox}" BasedOn="{StaticResource ComboBoxStyle}">
        <Setter Property="SelectedValuePath" Value="Tag"/>
        <Setter Property="Items">
            <Setter.Value>
                <ComboBoxItem Tag="{StaticResource True}">Yes</ComboBoxItem>
                <ComboBoxItem Tag="{StaticResource False}">No</ComboBoxItem>
            </Setter.Value>
        </Setter>
    </Style>

लेकिन मुझे "मान एक से अधिक बार सेट किया गया है" त्रुटि प्राप्त होती है। मैं सोच रहा था कि मुझे वस्तुओं को किसी प्रकार के संग्रह कंटेनर में लपेटने की ज़रूरत है, लेकिन मुझे पता नहीं चला कि क्या। क्या ऐसा करना संभव भी है?

मुझे एहसास है कि मैं इसके लिए एक साधारण कस्टम नियंत्रण बना सकता हूं, लेकिन अगर शैली में यह संभव नहीं है तो मुझे इसकी बेहतर समझ चाहिए।

0
amnesia 1 नवम्बर 2017, 14:46

1 उत्तर

सबसे बढ़िया उत्तर

Items के बजाय ItemsSource गुण सेट करें। यदि आप बूलियन मानों के संग्रह का उपयोग करते हैं तो SelectedValue और SelectedValuePath की भी कोई आवश्यकता नहीं है।

xmlns:sys="clr-namespace:System;assembly=mscorlib"
...

<Style x:Key="trueFalseCombo" TargetType="ComboBox">
    <Setter Property="ItemsSource">
        <Setter.Value>
            <x:Array Type="sys:Boolean">
                <sys:Boolean>True</sys:Boolean>
                <sys:Boolean>False</sys:Boolean>
            </x:Array>
        </Setter.Value>
    </Setter>
</Style>

सही और गलत के बजाय हां और नहीं प्रदर्शित करने के लिए, आप इस तरह एक आइटम टेम्पलेट का उपयोग कर सकते हैं:

<Setter Property="ItemTemplate">
    <Setter.Value>
        <DataTemplate>
            <TextBlock>
                <TextBlock.Style>
                    <Style TargetType="TextBlock">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding}" Value="True">
                                <Setter Property="Text" Value="Yes"/>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding}" Value="False">
                                <Setter Property="Text" Value="No"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </TextBlock.Style>
            </TextBlock>
        </DataTemplate>
    </Setter.Value>
</Setter>
1
Clemens 1 नवम्बर 2017, 15:41