System.Windows.Media.Color为颜色名称

时间:2010-10-14 15:19:45

标签: c# silverlight-3.0

我有以下内容:

Color color = Colors.Red;
color.ToString();

以十六进制表示形式输出。有没有办法输出“红色”?

奖励指向任何提供适用于不同文化的解决方案的人(即输出西班牙语的“Rojo”)。

2 个答案:

答案 0 :(得分:8)

看起来您可能需要使用Reflection手动滚动自己的解决方案。这是我的第一次拍摄:

public static string GetColorName(this System.Windows.Media.Color color)
{
    Type colors = typeof(System.Windows.Media.Colors);
    foreach(var prop in colors.GetProperties())
    {
        if(((System.Windows.Media.Color)prop.GetValue(null, null)) == color)
            return prop.Name;
    }

    throw new Exception("The provided Color is not named.");
}

请记住,这绝不是有效的,但从文档中我可以看到它是唯一的方法。

答案 1 :(得分:0)

一个选项可能是将Media.Color转换为Drawing.Color

private System.Drawing.Color ColorFromMediaColor(System.Windows.Media.Color clr)
{
  return System.Drawing.Color.FromArgb(clr.A, clr.R, clr.G, clr.B);
}

然后使用Drawing.Color对象的Name属性来获取颜色名称。

对于本地化,您可以在根据您提供的资源文件构建的翻译词典中查找color name