iro*_*isa 4 c# colors winrt-xaml windows-phone-8.1 win-universal-app
我正在尝试将Windows.UI.Color转换为Windows 8.1 Universal应用程序中的简单字符串颜色名称.
我已经有Color的ARGB值(甚至十六进制代码),我只想要它的相关已知名称(例如,从#7AFF7A7A到"鲑鱼").由于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;
}
Run Code Online (Sandbox Code Playgroud)
测试:
Color c = Colors.AliceBlue;
Debug.WriteLine("{0} is {1}", c, ColorNames[c]);
Run Code Online (Sandbox Code Playgroud)
结果:
#FFF0F8FF is AliceBlue
Run Code Online (Sandbox Code Playgroud)
注意重复(例如Colors.Aqua和Colors.Cyan都映射到#FF00FFFF).我的循环将更喜欢第二个.
取决于你的Color对象可能想要键入字符串十六进制值而不是Color对象本身的位置,如果你真的很聪明,你可以做一个最接近的匹配而不仅仅是精确的(实现左边作为读者练习) :))
- 抢