Как преобразовать 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
Другие вопросы по тегам