【问题标题】:Changing hex value string to a system color string in WPF在 WPF 中将十六进制值字符串更改为系统颜色字符串
【发布时间】:2016-04-14 17:57:10
【问题描述】:

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

或者"#FF0000" 到"red"。

在十六进制值不是系统颜色的情况下,它将只使用十六进制值。 "#906" 将输出 "#906"。

有什么想法吗?

【问题讨论】:

  • 你的意思是你必须在 UI 中向用户展示这些选项,比如颜色选择器什么的?
  • 用户将输入一个颜色值,可以是十六进制格式“#F00”,也可以是系统颜色“红色”。如果他们输入的十六进制值是系统颜色,我需要输出系统颜色而不是十六进制值。
  • 您尝试过任何代码吗?你应该向我们展示你所拥有的。
  • 系统颜色是可变的,并不总是一样的,你的意思是命名的颜色,比如红色,绿色等???

标签: c# .net wpf hex


【解决方案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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 2018-07-24
    • 2011-04-06
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 2012-11-01
    相关资源
    最近更新 更多