2012-06-22 27 views
7

रंग को हाइलाइट करें मुझे WP12 में Listbox के SelectedItem के HighlightBrushKey को सेट करने में कोई समस्या है। मेरा इरादा कोड में झूठ बोलने वाले दिए गए बूलियन मान के आधार पर किसी आइटम का रंग सेट करना था।WPF बदलना ListboxItem चयनित जब

मैं कोशिश की है के लिए निम्न चरण:

  • , एक कनवर्टर को लागू करने बूलियन जाँच और सही रंग लौटने।

    उदाहरण:

    <ribbon:RibbonWindow.Resources> 
        <l:WindowControl x:Key="ListBoxItemBackgroundConverter" /> 
        <Style x:Key="listBoxStyle" TargetType="{x:Type ListBoxItem}"> 
         <Style.Resources> 
         <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="{Binding Source={x:Static SystemColors.HighlightBrushKey}, Converter={StaticResource ListBoxItemBackgroundConverter}}"/> 
         <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{Binding Source={x:Static SystemColors.ControlBrushKey}, Converter={StaticResource ListBoxItemBackgroundConverter}}"/> 
         </Style.Resources> 
        </Style> 
    </ribbon:RibbonWindow.Resources> 
    

    समस्या यहीं पर Convert विधि केवल एक बार बुलाया गया था, लेकिन मैं कनवर्टर हर बार जब मैं एक आइटम और बूलियन जाँच का चयन कहा जा करने की जरूरत है। एक ट्रिगर की तरह, लेकिन "HighlightBrushKey" के साथ।

    कनवर्टर:

    public object Convert(object value, Type targetType, 
             object parameter, CultureInfo culture) 
    { 
        if(currentField == null) 
         return Brushes.Yellow; 
        if (currentField.Save) 
         return Brushes.LightGreen; 
        else 
         return Brushes.Yellow; 
    } 
    
  • मेरा अगला विचार "HighlightBrushKey" सेटिंग गया था करने के लिए "Transparent" और कोड में मैन्युअल item.Background बदलते। समस्या यह है कि मेरे आइटम सफेद हो गया था और पृष्ठभूमि का रंग

    उदाहरण नहीं देखा जा सकता: अग्रिम में

    <ListBox.Resources> 
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" /> 
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" /> 
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" /> 
    </ListBox.Resources> 
    

धन्यवाद! :)

+2

अच्छा पहला सवाल एंडी, ठीक उसी तरह के सटीक उदाहरणों के साथ बनाया गया जो आप हाइलाइट करने की कोशिश कर रहे थे! +1 – ThePower

+0

@ एंडी आपके कनवर्टर में वर्तमान फ़ील्ड 1 क्या है? आप इसे कनवर्टर में कैसे प्राप्त कर रहे हैं? क्या आप उपलब्ध अदृश्य शैली में 'currentField' (यानी YourViewModelProperty) को बाध्य करने का प्रयास कर सकते हैं। – akjoshi

+0

वर्तमान फ़ील्ड एक वस्तु है। कक्षा का नाम फ़ील्ड है और इसमें "सहेजें" नामक एक बूलियन संपत्ति है। मैं एक्सएएमएल में इसे कैसे बांध सकता हूं? – Andy

उत्तर

1
<Style x:Key="listBoxStyle" TargetType="{x:Type ListBox}"> 
    <Style.Resources> 
     <!-- Background of selected item when focussed --> 
     <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red" /> 
     <!-- Background of selected item when not focussed --> 
     <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Green" /> 
    </Style.Resources> 
</Style> 

<ListBox Style="{StaticResource listBoxStyle}"> 
</ListBox> 
+0

आपके उत्तर के लिए धन्यवाद, लेकिन यह मेरी समस्या का समाधान नहीं करता है। मैं इन पंक्तियों को जानता हूं, लेकिन मेरे पास रंग के बीच एक मौजूदा निर्भरता है (आपका उदाहरण: रंग = "लाल") और एक बूलियन मान वर्तमान Field.Save, रनटाइम में एक ऑब्जेक्ट। यदि यह गलत है, तो रंग पीला होना चाहिए और यदि यह सत्य है, तो रंग हरा होना चाहिए। – Andy

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