我在xaml中有一个标签
<Label Content="This is a test"
Foreground="{Binding Path=TextColor, Converter={StaticResource ResourceKey=colorConverter}}" />
在我的视图模型中我有属性
public string TextColor
{
get{ return "00FFFF"; }
}
对于我的颜色转换器我有类
public class ColorConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string color = (string)value;
if (!color.Substring(0, 1).Equals("#"))
{ color = color.Insert(0, "#"); }
Color result = (Color)System.Windows.Media.ColorConverter.ConvertFromString(color);
return result;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Color c = (Color)value;
return string.Format("#{0}{1}{2}", c.R.ToString("x2"), c.G.ToString("x2"), c.B.ToString("x2"));
}
#endregion
}
文本的颜色是blac而不是它应该是的蓝绿色。 当我单步执行它时,Convert方法似乎返回正确的颜色。我不确定在哪里可以想出这个。
答案 0 :(得分:1)
如果您只是更新转换器以返回&#34;格式化的&#34;字符串,而不是尝试将其强制转换为Color
对象。
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string color = (string)value;
if (!color.Substring(0, 1).Equals("#"))
{
color = color.Insert(0, "#");
}
return color ;
}
尽管如所建议的那样,没有必要让转换器只是添加一个&#39;#&#39;。这也可以使用StringFormat完成(在绑定中)..或者只是在属性内部进行转换,如果你真的需要它。