我需要将字符串值"#FFF"
更改为字符串"white"
或"#FF0000"
到"red"
。
如果十六进制值不是系统颜色,则只使用十六进制值。 "#906"
会输出"#906"
。
有什么想法吗?
答案 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;