2011-02-09 19 views
6

पर आधारित कॉम्बोबॉक्स की सक्षम संपत्ति सेट करें, यदि मैं किसी अन्य कॉम्बोबॉक्स में कोई आइटम चुना गया है, तो मैं कॉम्बोबॉक्स को सक्षम/अक्षम करना चाहता हूं। मैं स्टाइल पर ट्रिगर सेट करके इसे काम करने में सक्षम था, लेकिन यह combobox के लिए मेरी कस्टम वैश्विक शैली ओवरराइड करता है। क्या मेरी शैली खोए बिना समान कार्यक्षमता प्राप्त करने का कोई और तरीका है?चयनित इटैम

<ComboBox Grid.Column="1" Grid.Row="1" 
       Name="AnalysisComboBox" 
       MinWidth="200" 
       VerticalAlignment="Center" HorizontalAlignment="Left" 
       ItemsSource="{Binding Path=AvailableAnalysis}"> 

     <ComboBox.Style> 
      <Style TargetType="{x:Type ComboBox}"> 
       <Setter Property="IsEnabled" Value="True" /> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding SelectedItem,ElementName=ApplicationComboBox}" Value="{x:Null}"> 
         <Setter Property="IsEnabled" Value="False" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </ComboBox.Style> 
    </ComboBox> 
+0

एफडब्ल्यूआईडब्ल्यू, मुझे यह एक शैली के साथ काम मिल गया और मैं कनवर्टर को पसंद करता हूं क्योंकि यह सब एक्सएएमएल में है। मुझे निर्दिष्ट करने के लिए एक सेटटर की आवश्यकता नहीं थी कि ट्रिगर सक्रिय नहीं होने पर IsEnabled सत्य होना चाहिए। मैं इसे अन्य लोगों के लिए पोस्ट कर रहा हूं जो इस प्रश्न में आते हैं, ताकि उन्हें यह धार न मिले कि यह शैली के साथ नहीं किया जा सकता है। – Kohanz

उत्तर

9

आप एक शैली के माध्यम से ऐसा करने की जरूरत नहीं है, आप IsEnabled संपत्ति बाध्य कर सकते हैं

<ComboBox Grid.Column="1" Grid.Row="1" 
       Name="AnalysisComboBox" 
       MinWidth="200" 
       VerticalAlignment="Center" HorizontalAlignment="Left" 
       IsEnabled={Binding SelectedItem, ElementName=ApplicationComboBox, Converter={StaticResource NullToFalseConverter}}" 
       ItemsSource="{Binding Path=AvailableAnalysis}"/> 

कहाँ NullToFalseConverter followsing कनवर्टर का एक उदाहरण के लिए एक महत्वपूर्ण है:

public class NullToFalseConverter: IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return value == null; 
    } 

    public object ConvertBack(object value, Type targetType, 
     object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

मुझे ठीक से काम करने के लिए NullToFalseConverter को बाध्यकारी प्रतीत नहीं होता है। मुझे अपवाद मिल रहा है: "'NullToFalseConverter' नामक संसाधन नहीं मिल रहा है। संसाधन नाम केस संवेदनशील हैं।" मदद? क्षमा करें, मैं WPF के लिए बहुत नया हूं: -/ – KrisTrip

+3

@ KrisTrip आपको वास्तव में कनवर्टर का एक उदाहरण घोषित करने की आवश्यकता है। ध्यान दें कि @ कोलिने इसे 'स्टेटिक रिसोर्स' के रूप में संदर्भित कर रहा है। इसका मतलब है कि आपको संसाधन कॉम्बोबॉक्स में जो कुछ भी शामिल है, उसके संसाधन संग्रह में एक प्रविष्टि की आवश्यकता है जो इस तरह कुछ दिखता है: '' –

+3

मुझे लगता है कि कनवर्टर का कार्यान्वयन गलत है, यह <वापसी मूल्य होना चाहिए! = शून्य> और यह आवश्यक नहीं है कि एक उदाहरण घोषित करें। कम से कम मेरे पास एक नहीं है और यह काम करता है। – steffan

5

हां, आप अपने वैश्विक शैली "वारिस" करने के लिए BasedOn विशेषता सेट कर सकते हैं: क्या आप वैश्विक शैली के प्रमुख सेट कर सकते हैं

<ComboBox Grid.Column="1" Grid.Row="1" 
      Name="AnalysisComboBox" 
      MinWidth="200" 
      VerticalAlignment="Center" HorizontalAlignment="Left" 
      ItemsSource="{Binding Path=AvailableAnalysis}"> 
    <ComboBox.Style> 
     <Style TargetType="{x:Type ComboBox}" 
       BasedOn="{StaticResource {x:Type ComboBox}}"> 
      <Setter Property="IsEnabled" Value="True" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding SelectedItem,ElementName=ApplicationComboBox}" Value="{x:Null}"> 
        <Setter Property="IsEnabled" Value="False" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ComboBox.Style> 
</ComboBox> 

इसके बजाय {StaticResource {x:Type ComboBox}} की (अगर यह निहित नहीं है)।

लेकिन इस विशेष कार्य के लिए आपको शैली को परिभाषित करने की आवश्यकता नहीं है। तुम सिर्फ एक बाध्यकारी IsEnabled के गुण सेट और एक कनवर्टर का उपयोग एक बूलियन के लिए एक और कॉम्बो बॉक्स के चयनित आइटम परिवर्तित करने के लिए कर सकते हैं:

<ComboBox Grid.Column="1" Grid.Row="1" 
       Name="AnalysisComboBox" 
       MinWidth="200" 
       VerticalAlignment="Center" HorizontalAlignment="Left" 
       ItemsSource="{Binding Path=AvailableAnalysis}" 
      IsEnabled="{Binding SelectedItem,ElementName=ApplicationComboBox, Converter={StaticResource NotNullConverter}"/> 
+0

इस काम के रूप में उपरोक्त भी। मैंने तय किया कि कनवर्टर विकल्प क्लीनर था हालांकि मैंने इसे सही के रूप में चिह्नित किया। – KrisTrip

0

आप बस एक "सामान्य हो सकता है इस प्रकार सीधे एक मूल्य के कनवर्टर का उपयोग करते हुए "बाध्यकारी, बदलने के लिए मान कनवर्टर के साथ" मान मौजूद है "=> सत्य," मान शून्य है "=> झूठा।

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