在WP8中,我想根据绑定中的布尔属性将TextBlock的前景颜色设置为不同的颜色。 此外,我还想使用StaticResource作为颜色。
我已经研究过的一种可能性是使用ValueConverter,但到目前为止还没有使用StaticResources。 我尝试的代码类似于:
<TextBlock Foreground="{Binding IsBlue, Converter={StaticResource BoolToColorConverter}}" />
我的转换器(我没想到返回一个字符串会起作用但决定测试它):
public class BoolToColorConverter : IValueConverter{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return (value is bool && (bool)value) ? "{StaticResource PhoneAccentBrush}" : "{StaticResource PhoneSubtleBrush}";
}
}
此外,我研究了使用DataTriggers,但我发现WP8并没有直接支持它们。
我还没有尝试过依赖属性,因为我想首先确保我没有错过更简单,更明显的解决方法。
创建它的最佳方法是什么?
答案 0 :(得分:1)
您有两种方法可以解决此问题:
您可以通过附加属性扩展转换器,这些属性将由绑定
填充public class BooleanToBrushConverter
: IValueConverter
{
public Brush TrueBrush { get; set; }
public Brush FalseBrush { get; set; }
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is bool)
{
return (bool) value
? TrueBrush
: FalseBrush;
}
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
现在您可以通过页面资源
对其进行初始化<BooleanToBrushConverter x:Key="BooleanToBrushConverter" TrueBrush="{StaticResource PhoneAccentBrush}" FalseColor="{StaticResource PhoneSubtleBrush}" />
使用它就像
一样简单<TextBlock Foreground="{Binding IsBlue, Converter={StaticResource BooleanToBrushConverter}}" />
第二个解决方案是修复代码以从应用程序资源中恢复画笔
public class BoolToColorConverter
: IValueConverter{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return (value is bool && (bool)value) ? Application.Current.Resources["PhoneAccentBrush"] : Application.Current.Resources["PhoneSubtleBrush"];
}
}