我试图将Windows.UI.Color转换为Windows 8.1 Universal应用程序中的简单字符串颜色名称。
我已经拥有了Color的ARGB值(甚至是十六进制代码),我只想要它的相关已知名称(例如,从#7AFF7A7A到#34;三文鱼和#34;)。由于System.Drawing在WinRT中不可用,我无法使用ColorConverter或ColorTranslator。
我尝试将Windows.UI.Color对象转换为SolidColorBrush甚至是Brush,但它们都没有提供名称转换功能。
最好的方法是什么?
答案 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