如何将Windows.UI.Color转换为Windows Universal应用程序中的字符串颜色名称

时间:2014-10-04 00:44:06

标签: c# colors winrt-xaml windows-phone-8.1 win-universal-app

我试图将Windows.UI.Color转换为Windows 8.1 Universal应用程序中的简单字符串颜色名称。

我已经拥有了Color的ARGB值(甚至是十六进制代码),我只想要它的相关已知名称(例如,从#7AFF7A7A到#34;三文鱼和#34;)。由于System.Drawing在WinRT中不可用,我无法使用ColorConverter或ColorTranslator。

我尝试将Windows.UI.Color对象转换为SolidColorBrush甚至是Brush,但它们都没有提供名称转换功能。

最好的方法是什么?

2 个答案:

答案 0 :(得分:6)

Colors类包含许多颜色的命名属性。没有固定反向查找,但您可以使用反射从颜色到颜色名称构建自己的映射。

Dictionary<Color, string> ColorNames = new Dictionary<Color, string>();
foreach (var color in typeof(Colors).GetRuntimeProperties())
{
    ColorNames[(Color)color.GetValue(null)] = color.Name;
}

测试:

Color c = Colors.AliceBlue;
Debug.WriteLine("{0} is {1}", c, ColorNames[c]);

结果:

#FFF0F8FF is AliceBlue

注意重复(例如Colors.Aqua和Colors.Cyan都映射到#FF00FFFF)。我的循环将更喜欢第二个。

取决于你的Color对象可能想要键入字符串十六进制值而不是Color对象本身的位置,如果你真的很聪明,你可以做一个最接近的匹配而不仅仅是精确的(作为练习留下的实现)为读者:))

- 罗布

答案 1 :(得分:1)

您可以只使用ColorHelper.ToDisplayName

var c = Color.FromArgb(255, 255, 0, 0);
Debug.WriteLine("{0} is {1}", c, ColorHelper.ToDisplayName(c));

结果:

#FFFF0000 is Red