我在视图模型的一个属性上使用了一个简单的转换器,例如,假设您有一个布尔属性,想要控制一个样式,您可以这样做。
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
属性更改。
如果您想使用比布尔值更复杂的条件,您可以在转换器中创建一个对象到样式的字典,然后让转换器进行查找,但我发现布尔值在大多数情况下都有效。