在Linux中将十六进制值字符串更改为系统颜色字符串

时间:2016-04-14 17:57:10

标签: c# .net wpf hex

我需要将字符串值"#FFF"更改为字符串"white"

"#FF0000""red"

如果十六进制值不是系统颜色,则只使用十六进制值。 "#906"会输出"#906"

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果您只想映射系统颜色,可以执行以下操作。请注意,这也会返回系统的值,例如WindowBrush等,我使用continue检查过滤掉了。请注意,我在这里使用c#6字符串插值,但你可以连接,但是你喜欢。

using Color = System.Drawing.Color;

...
{
    string input = $"#ff{myTextBox.Text}"; // let the user enter just the digits 

    input = input.ToLower(); // Needs to be lowercase, or you could use a case invariant check later

    string name;

    KnownColor[] values = (KnownColor[])Enum.GetValues(typeof(KnownColor));

    for(int i =0; i <values.Length; i++)
    {
        if (i <= 25 || i >= 167) continue; // Eliminate default wpf control colors

        int RealColor = Color.FromKnownColor(values[i]).ToArgb();

        string ColorHex = $"{RealColor:x6}";

        if ($"#{ ColorHex }"== input)
        {
            name = values[i].ToString();
            break;
        }
    }
}

老实说,虽然我只是创建自己的Dictionary值并进行简单查找,例如:

var myColors = new Dictionary<string, string>
{
    {"#FF000000", "Black"},
    ...
};

string colorName;

if (myColors.ContainsKey(myTextBox.Text))
    colorName = myColors[myTextBox.Text];
else
    colorName = myTextBox.Text;