2009-05-25 12 views

उत्तर

238

उपयोग MultiDataTrigger प्रकार

<Style TargetType="ListBoxItem"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding Path=State}" Value="WA"> 
     <Setter Property="Foreground" Value="Red" /> 
     </DataTrigger>  
     <MultiDataTrigger> 
     <MultiDataTrigger.Conditions> 
      <Condition Binding="{Binding Path=Name}" Value="Portland" /> 
      <Condition Binding="{Binding Path=State}" Value="OR" /> 
     </MultiDataTrigger.Conditions> 
     <Setter Property="Background" Value="Cyan" /> 
     </MultiDataTrigger> 
    </Style.Triggers> 
    </Style> 
+20

में परिभाषित किया गया है वहाँ एक "या" MultiTrigger में बयान करने के लिए एक रास्ता है। जैसे नाम = "पोर्टलैंड" या राज्य = "या" – jasonk

+10

@ जेसनक - सुनिश्चित नहीं है कि आप इसे मल्टीट्रिगर के साथ कर सकते हैं। आप इसके लिए दो ट्रिगर परिभाषित कर सकते हैं .. – Gishu

+0

यदि यह एक साधारण या शर्त कथन है, तो आप तर्क को उलट सकते हैं ताकि यह एक AND में बदल जाए। | condition1 | condition2 | परिणाम | | सच | सच | सच | | सच | झूठी | सच | | झूठी | सच | सच | | झूठी | झूठी | झूठा | या तो/OR की जांच करने के बजाय सत्य हैं, जांचें कि दोनों/और गलत हैं, और डिफ़ॉल्ट को सही पर सेट करें। –

39

@jasonk - यदि आपके पास करने के लिए "या" तब से सभी शर्तों (ए और बी) < => ~ (~ एक या ~ बी)

नकारना चाहते हैं लेकिन आप अन्य मूल्यों अगर बूलियन से प्रकार कन्वर्टर्स का उपयोग करके देखें:

<MultiDataTrigger.Conditions> 
    <Condition Value="True"> 
     <Condition.Binding> 
      <MultiBinding Converter="{StaticResource conditionConverter}"> 
       <Binding Path="Name" /> 
       <Binding Path="State" /> 
      </MultiBinding> 
     </Condition.Binding> 
     <Setter Property="Background" Value="Cyan" /> 
    </Condition> 
</MultiDataTrigger.Conditions> 

क्या आप एक शर्त है जो आप सूट का निर्माण करने के इच्छानुसार Convert विधि में मूल्यों का उपयोग कर सकते हैं।

+1

आह, सब कुछ अस्वीकार करने और इसे एक या स्थिति में फ़्लिप करने के लिए स्मार्ट चाल :) –

+5

क्या आप इस उत्तर पर थोड़ा सा विस्तार कर सकते हैं? मुझे यकीन नहीं है कि इसका उपयोग कैसे करें। 'कंडीशन कनवर्टर' क्या करता है?हम इस उदाहरण में "पोर्टलैंड" और "OR" को हमारे दो या 'विकल्पों के रूप में कैसे निर्दिष्ट कर रहे हैं? – DLeh

+0

@DLeh - [यहां एक अच्छा ट्यूटोरियल है] (http://tech.pro/tutorial/809/wpf-tutorial-using-multibindings) 'मल्टीबाइंडिंग' का उपयोग करने पर। – cod3monk3y

14

@serine's answer पर विस्तृत करने के लिए और गैर-तुच्छ बहु-मूल्यवान स्थिति के साथ काम करने का वर्णन करें: मुझे बूलियन स्थिति NOT a AND (b OR NOT c) के लिए किसी आइटम पर "मंद-आउट" ओवरले दिखाने की आवश्यकता थी।

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

मद्धिम के लिए तर्क इस प्रकार है:

NOT IsFocused AND (IsDefocused OR NOT Enabled)

इस तर्क को लागू करने के लिए, मैं एक सामान्य IMultiValueConverter मेरे तर्क

// 'P' represents a parenthesis 
//  ! a && (b || ! c) 
class NOT_a_AND_P_b_OR_NOT_c_P : IMultiValueConverter 
{ 
    // redacted [...] for brevity 
    public object Convert(object[] values, ...) 
    { 
     bool a = System.Convert.ToBoolean(values[0]); 
     bool b = System.Convert.ToBoolean(values[1]); 
     bool c = System.Convert.ToBoolean(values[2]); 

     return !a && (b || !c); 
    } 
    ... 
} 

मैच के लिए XAML में (awkwardly) नामक बनाया मैं MultiDataTrigger में <Style><Style.Triggers> संसाधन

में इसका उपयोग करता हूं
<MultiDataTrigger> 
    <MultiDataTrigger.Conditions> 
     <!-- when the equation is TRUE ... --> 
     <Condition Value="True"> 
      <Condition.Binding> 
       <MultiBinding Converter="{StaticResource NOT_a_AND_P_b_OR_NOT_c_P}"> 
        <!-- NOT IsFocus AND (IsDefocused OR NOT Enabled) --> 
        <Binding Path="IsFocus"/> 
        <Binding Path="IsDefocused" /> 
        <Binding Path="Enabled" /> 
       </MultiBinding> 
      </Condition.Binding> 
     </Condition> 
    </MultiDataTrigger.Conditions> 
    <MultiDataTrigger.Setters> 
     <!-- ... show the 'dim-out' overlay --> 
     <Setter Property="Visibility" Value="Visible" /> 
    </MultiDataTrigger.Setters> 
</MultiDataTrigger> 

और पूर्णता के लिए, मेरी कनवर्टर एक ResourceDictionary

<ResourceDictionary xmlns:conv="clr-namespace:My.Converters" ...> 
    <conv:NOT_a_AND_P_b_OR_NOT_c_P x:Key="NOT_a_AND_P_b_OR_NOT_c_P" /> 
</ResourceDictionary> 
+7

मुझे नहीं लगता कि यह कनवर्टर्स का इरादा इस तरह इस्तेमाल किया जाना है। वे वास्तव में प्रदर्शन के लिए मूल्यों को बदलने के लिए हैं। जब यह जटिल हो जाता है, तो केवल दृश्य मॉडल पर एक गणना की गई संपत्ति बनाएं जो आपको आवश्यकतानुसार देता है। –

+5

हालांकि नामकरण –

+2

प्रोग्रामिंग एक शिल्प था और कोड सुरुचिपूर्ण था याद रखने के लिए चुप्पी का एक पल लें। –

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

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