我正在尝试将 Windows.UI.Color 转换为 Windows 8.1 通用应用程序中的简单字符串颜色名称。
我已经有了 Color 的 ARGB 值(甚至是十六进制代码),我只想要其关联的已知名称(例如,从 #7AFF7A7A 到“salmon”)。由于 System.Drawing 在 WinRT 中不可用,因此我无法使用 ColorConverter 或 ColorTranslator。
我尝试将 Windows.UI.Color 对象转换为 SolidColorBrush 甚至 Brush,但它们都不提供名称转换功能。
这样做的最佳方法是什么?
Colors 类包含许多颜色的命名属性。没有预设的反向查找,但您可以使用反射来构建您自己的从颜色到颜色名称的映射。
Dictionary<Color, string> ColorNames = new Dictionary<Color, string>();
foreach (var color in typeof(Colors).GetRuntimeProperties())
{
ColorNames[(Color)color.GetValue(null)] = color.Name;
}
Test:
Color c = Colors.AliceBlue;
Debug.WriteLine("{0} is {1}", c, ColorNames[c]);
Result:
#FFF0F8FF is AliceBlue
注意重复项(例如 Colors.Aqua 和 Colors.Cyan 都映射到 #FF00FFFF)。我的循环更喜欢第二个。
根据 Color 对象的来源,您可能想要关闭字符串十六进制值而不是 Color 对象本身,如果您真的很聪明,您可以进行最接近的匹配,而不仅仅是精确匹配(实现留给读者作为练习) :) )
--Rob
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)