2010-06-13 5 views
15

В то время как я в порядке со стандартным стилем управления в silverlight, я недавно начал использовать более динамичные методы выборки данных, которые будут отображаться в элементах управления. Одним из элементов управления, которые я перерабатываю, является набор ссылок.Условный стиль в Silverlight?

Проблема, с которой я сталкиваюсь, заключается в том, что каждая ссылка окрашивается по-разному, когда мышь. Один красный, один синий, один зеленый и т. Д. Есть ли способ стилизовать эти элементы, не жертвуя динамикой использования элемента управления с шаблоном данных?

ответ

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.

Если вы хотите использовать более сложное условие, чем логическое, вы всегда можете создать словарь объектов для стилей в вашем конвертере, а затем сделать конвертер для поиска, но я обнаружил, что в большинстве случаев обычно работают boolean.

+0

Идеальный смысл, ура! – deanvmc

Смежные вопросы