Как преобразовать Windows.UI.Color в имя цвета строки в приложении Windows Universal
Я пытаюсь преобразовать Windows.UI.Color в простое имя цвета строки в моем приложении Windows 8.1 Universal.
У меня уже есть значения ARGB из Color (даже шестнадцатеричный код), и я просто хочу, чтобы его связанное известное имя (например, от #7AFF7A7A до "salmon"). Поскольку System.Drawing недоступен в WinRT, я не могу использовать ColorConverter или ColorTranslator.
Я пытался преобразовать объект Windows.UI.Color в SolidColorBrush или даже Brush, но ни один из них не обеспечивает возможность преобразования имени.
Какой лучший способ сделать это?
1 ответ
Класс 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
Вы можете просто использовать ColorHelper.ToDisplayName
:
var c = Color.FromArgb(255, 255, 0, 0);
Debug.WriteLine("{0} is {1}", c, ColorHelper.ToDisplayName(c));
Результат:
#FFFF0000 is Red