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

C# 如何在Windows通用应用程序中将Windows.UI.Color转换为字符串颜色名称,c#,colors,winrt-xaml,windows-phone-8.1,win-universal-app,C#,Colors,Winrt Xaml,Windows Phone 8.1,Win Universal App,我正在尝试在我的Windows 8.1通用应用程序中将Windows.UI.Color转换为简单的字符串颜色名称 我已经有了颜色中的ARGB值(甚至十六进制代码),我只想要它的相关已知名称(例如,从#7AFF7A7A到“鲑鱼”)。由于System.Drawing在WinRT中不可用,因此我无法使用ColorConverter或ColorTranslator 我曾尝试将Windows.UI.Color对象转换为SolidColorBrush甚至笔刷,但它们都不提供名称转换功能 最好的方法是什么?颜

我正在尝试在我的Windows 8.1通用应用程序中将Windows.UI.Color转换为简单的字符串颜色名称

我已经有了颜色中的ARGB值(甚至十六进制代码),我只想要它的相关已知名称(例如,从#7AFF7A7A到“鲑鱼”)。由于System.Drawing在WinRT中不可用,因此我无法使用ColorConverter或ColorTranslator

我曾尝试将Windows.UI.Color对象转换为SolidColorBrush甚至笔刷,但它们都不提供名称转换功能


最好的方法是什么?

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

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

#FFF0F8FF is AliceBlue
#FFFF0000 is Red
注意重复(例如颜色。浅绿色和青色都映射到#FF00FFFF)。我的循环会选择第二个

根据颜色对象来自何处,您可能希望键入字符串十六进制值,而不是颜色对象本身,如果您非常聪明,您可以进行最接近的匹配,而不仅仅是精确匹配(实现留给读者作为练习:))

--Rob

您只需使用:

var c=Color.FromArgb(255,255,0,0);
WriteLine(“{0}是{1}”,c,ColorHelper.ToDisplayName(c));
结果:

#FFF0F8FF is AliceBlue
#FFFF0000 is Red

你能详细说明一下吗?ARGB值有什么问题?没有问题,只需要名称。下面的答案是一个很好的解决方案。谢谢你的帮助!