2016-04-14 34 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; 
相關問題