Lo he hecho usando un convertidor simple en una propiedad del modelo de vista, por ejemplo, digamos que tiene una propiedad booleana que desea controlar un estilo que podría hacer esto.
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
}
continuación, como un recurso que definiría sus dos estilos ...
<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>
allí tendría que aplicarlo a su objeto como éste ...
<TextBlock Text="{Binding Description}"
Margin="20,4,4,4"
Style="{Binding IsConfirmed, Converter={StaticResource BoldTextConverter}}"></TextBlock>
Dónde está IsConfirmed una propiedad booleana en el modelo de vista, esto también mantendrá el estilo sincronizado si la propiedad IsConfirmed
cambia.
Si desea utilizar una condición más complicada que un booleano, siempre puede crear un Diccionario de objetos para Estilos en su convertidor y luego hacer que el convertidor realice una búsqueda, pero he encontrado que normalmente los booleanos funcionan en la mayoría de los casos.
¡Tiene perfecto sentido, salud! – deanvmc