【问题标题】:How to get the Color Name String of Color in c# windows application如何在 c# windows 应用程序中获取颜色的颜色名称字符串
【发布时间】:2020-08-12 14:31:39
【问题描述】:

我正在研究一些色调,为此我创建了一些这样的颜色自定义属性..

public struct StaticColors
    {
        //White Shades
        public static Color White = ColorTranslator.FromHtml("#ecf0f1");
        public static Color White_1 = ColorTranslator.FromHtml("#c5d1d4");
        public static Color White_2 = ColorTranslator.FromHtml("#a8babf");

        //Red Shades
        public static Color Red = ColorTranslator.FromHtml("#db2828");
        public static Color Red_1 = ColorTranslator.FromHtml("#a41b1b");
        public static Color Red_2 = ColorTranslator.FromHtml("#781414");
    }

现在我想要任何颜色的字符串...

var ColorName = StaticColors.White.ToString() 

然后我需要 ColorName 变量中的“White”,这样我就可以与其他人连接,但我得到的是 RGBA 值的字符串形式。

谁能帮我把颜色转换成字符串?

【问题讨论】:

  • 您必须编写自己的方法将 Color 转换为字符串,因为没有内置代码可能知道您要调用值为 a8babf 的颜色“White_2”。
  • 我只需要将颜色转换为字符串,例如 //public static Color White ---- 然后我需要具有相同属性名称的字符串数据类型中的颜色数据类型。但是不知道怎么弄。
  • 当您这样做时,您将获得Color 类的ToString 实现。如果要获取 StaticColors 类的字段名称,则需要使用反射。或者,您可以将 Color 包装在您自己的自定义类中,该类具有 "Name" 属性和 "Color" 属性。

标签: c# windows colors


【解决方案1】:

一种方法是使用nameof 表达式,它返回成员的字符串名称:

 var ColorName = nameof(StaticColors.White);

如果您希望Name 成为该字段的属性,另一种实现此目的的方法是将Color 类包装在您自己的自定义结构中并为其赋予Name 属性:

public struct StaticColor
{
    public string Name { get; }
    public Color Color { get; }

    public StaticColor(string name, Color color)
    {
        Name = name;
        Color = color;
    }
}

然后在您的StaticColors 结构中,您可以拥有这种类型的字段而不是Color:

public struct StaticColors
{
    //White Shades
    public static StaticColor White = 
        new StaticColor("White", ColorTranslator.FromHtml("#ecf0f1"));
    public static StaticColor White_1 = 
        new StaticColor("White_1", ColorTranslator.FromHtml("#c5d1d4"));
    public static StaticColor White_2 = 
        new StaticColor("White_2", ColorTranslator.FromHtml("#a8babf"));

    //Red Shades
    public static StaticColor Red = 
        new StaticColor("Red", ColorTranslator.FromHtml("#db2828"));
    public static StaticColor Red_1 = 
        new StaticColor("Red_1", ColorTranslator.FromHtml("#a41b1b"));
    public static StaticColor Red_2 = 
        new StaticColor("Red_2", ColorTranslator.FromHtml("#781414"));
}

现在您可以访问任何属性的Color 或Name:

var colorName = StaticColors.White.Name;
var colorColor = StaticColors.White.Color;

【讨论】:

  • 这不是我想要的,但您的替代解决方案做得很好!非常感谢您的帮助
  • 哦,我想出了另一种方法 - 只需使用 nameof 表达式!我更新了我的答案(在顶部)如何做到这一点。
猜你喜欢
  • 1970-01-01
  • 2014-11-29
  • 2019-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-12
  • 2013-08-11
  • 1970-01-01
相关资源
最近更新 更多