2016-04-14 19 views
0

我需要将字符串值"#FFF"更改为字符串"white"更改十六进制值的字符串到一个系统颜色字符串在WPF

或者"#FF0000""red"

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

任何想法?

+0

你的意思是你有在UI这些选项来呈现用户,像一个颜色选择器或什么? –

+0

用户将输入十六进制格式“#F00”或系统颜色“红色”的颜色值。如果它们输入的十六进制值是系统颜色,则需要输出系统颜色而不是十六进制值。 –

+0

您是否尝试过任何代码?你应该告诉我们你有什么。 – Danielle

回答

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; 
相关问题