System.Windows.Media.Color для названия цвета - PullRequest
1 голос
/ 14 октября 2010

У меня есть следующее:

Color color = Colors.Red;
color.ToString();

, который выводится как шестнадцатеричное представление. Есть ли способ вывести "красный"?

Бонус указывает на тот, кто дает решения, которые работают с различными культурами (то есть вывод "Rojo" для испанского).

Ответы [ 2 ]

8 голосов
/ 14 октября 2010

Похоже, вам, возможно, придется вручную свернуть собственное решение с помощью Reflection. Вот мой первый снимок:

public static string GetColorName(this System.Windows.Media.Color color)
{
    Type colors = typeof(System.Windows.Media.Colors);
    foreach(var prop in colors.GetProperties())
    {
        if(((System.Windows.Media.Color)prop.GetValue(null, null)) == color)
            return prop.Name;
    }

    throw new Exception("The provided Color is not named.");
}

Имейте в виду, что это ни в коем случае не эффективно, но из того, что я вижу в документации, это будет единственный выход.

0 голосов
/ 14 октября 2010

Одним из вариантов может быть преобразование Media.Color в Drawing.Color

private System.Drawing.Color ColorFromMediaColor(System.Windows.Media.Color clr)
{
  return System.Drawing.Color.FromArgb(clr.A, clr.R, clr.G, clr.B);
}

Затем используйте свойство Name из объекта Drawing.Color, чтобы получить имя цвета.

Что касается локализации, вы можете найти имя цвета в словаре перевода, созданном из предоставленных вами файлов ресурсов.

...