2010-06-13 10 views
15

जब मैं Silverlight में मानक नियंत्रण स्टाइल के साथ ठीक हूँ मैं हाल ही में आइटम नियंत्रण में प्रदर्शित करने के लिए डेटा प्राप्त करने में की और अधिक गतिशील तरीकों का उपयोग शुरू किया है। मैं जो नियंत्रण कर रहा हूं उनमें से एक लिंक का संग्रह है।सिल्वरलाइट में सशर्त स्टाइल?

मुद्दा मैं कर रहा हूँ कि प्रत्येक लिंक अलग रंग है, जब पर moused है। एक लाल, एक नीला, एक हरा, आदि। क्या डेटा आइटम टेम्पलेट के साथ आइटम नियंत्रण का उपयोग करने की गतिशीलता को बलि किए बिना इन वस्तुओं को स्टाइल करने का कोई तरीका है?

उत्तर

24

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

public class BoolToStyleConverter : IValueConverter 
{ 
    public Style TrueStyle{ get; set; } 
    public Style FalseStyle{ get; set; } 
    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return ((bool)value) ? TrueStyle : FalseStyle; 
    } 

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

    #endregion 
} 

तो एक संसाधन के रूप में आप अपने दो शैलियों को परिभाषित करेगा ...

<common:BoolToStyleConverter x:Key="BoldTextConverter"> 
     <common:BoolToStyleConverter.TrueStyle> 
      <Style TargetType="TextBlock"> 
       <Setter Property="FontWeight" 
         Value="Bold"></Setter> 
      </Style> 
     </common:BoolToStyleConverter.TrueStyle> 
     <common:BoolToStyleConverter.FalseStyle> 
      <Style TargetType="TextBlock"> 
       <Setter Property="FontWeight" 
         Value="Normal"></Setter> 
      </Style> 
     </common:BoolToStyleConverter.FalseStyle> 
    </common:BoolToStyleConverter> 

तो आप इसे इस तरह से अपनी वस्तु पर लागू होगा ...

<TextBlock Text="{Binding Description}" 
      Margin="20,4,4,4" 
      Style="{Binding IsConfirmed, Converter={StaticResource BoldTextConverter}}"></TextBlock> 

IsConfirmed कहां है viewmodel पर एक बूलियन संपत्ति, यह भी सिंक अगर IsConfirmed गुण परिवर्तन में शैली रखेंगे।

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

+0

सही भावना, चियर्स बनाता है! – deanvmc