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

4
我正试图将 Windows.UI.Color 转换成简单的字符串颜色名称,在我的 Windows 8.1 通用应用程序中。我已经获取了来自 Color 的 ARGB 值(甚至是十六进制代码),我只想获取与之相关联的已知名称(例如,从 #7AFF7A7A 到 "salmon")。由于 WinRT 中不可用 System.Drawing,因此我无法使用 ColorConverter 或 ColorTranslator。我已尝试将 Windows.UI.Color 对象转换为 SolidColorBrush 或甚至 Brush,但它们都没有提供转换名称的功能。请问有什么最好的方法可以做到这一点?

你能详细说明一下吗?ARGB值有什么问题吗? - Peter Ritchie
没问题,只需要名字。下面的答案是一个很好的解决方案。 - irodrisa
2个回答

5

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对象本身进行键控,如果您变得非常聪明,则可以进行最接近匹配而不仅仅是精确匹配(实现留给读者作为练习 :))

--Rob


感谢您的帮助! - irodrisa

3
你可以直接使用 ColorHelper.ToDisplayName 来实现:
var c = Color.FromArgb(255, 255, 0, 0);
Debug.WriteLine("{0} is {1}", c, ColorHelper.ToDisplayName(c));

结果:

#FFFF0000 is Red

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接