为什么我的颜色绑定不起作用

时间:2014-04-04 18:51:59

标签: wpf

我在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方法似乎返回正确的颜色。我不确定在哪里可以想出这个。

1 个答案:

答案 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完成(在绑定中)..或者只是在属性内部进行转换,如果你真的需要它。