2014-06-28 101 views

回答

2

你可以使用反射來獲取顏色名稱:

static string GetColorName(Color col) 
{ 
    PropertyInfo colorProperty = typeof(Colors).GetProperties() 
     .FirstOrDefault(p => Color.AreClose((Color)p.GetValue(null), col)); 
    return colorProperty != null ? colorProperty.Name : "unnamed color"; 
} 

下面的代碼演示瞭如何使用GetColorName()

Color col = new Color { R = 255, G = 255, B = 0, A = 255 }; 
MessageBox.Show(GetColorName(col)); // displays "Yellow" 

請注意,上述GetColorName()方法不是非常快,因爲它使用反射。如果您打算撥打GetColorName(),您可能應該在字典中緩存顏色表。

+0

謝謝!它解決了!我會在明天發佈你的答案翻譯成VB! –

0

在WPF中,十六進制代碼就像它是rgba一樣。

#ff008000 

rgba(255, 0, 80, 0); // last 2 00s are for alpha filter. 

如果是這樣的結果。您應該使用switch語句將其轉換爲某個String值。此外,.ToString()方法不會生成像Green這樣的人類可讀字符串結果。它只是將結果轉換爲字符串,而將值傳遞給需要String參數的方法和函數。

下面的代碼會做的伎倆爲您提供:

var converter = new System.Windows.Media.BrushConverter(); 
var brush = (Brush) converter.ConvertFromString("#ff008000"); 

現在使用brush

+0

謝謝!因爲我「說」VB我不得不將C#翻譯成VB,而且它運行良好: –

+0

呵呵,呵呵我從來不知道你在用VB。抱歉! –

0

我的Visual Basic的翻譯是這樣的:

Function GetColorName(ByVal col As System.Windows.Media.Color) As String 

    Dim coltype As System.Type = GetType(System.Windows.Media.Colors) 
    Dim colproplist() As PropertyInfo = coltype.GetProperties 

    Try 

     Dim colorproperty As PropertyInfo = colproplist.FirstOrDefault(Function(p As PropertyInfo) Color.AreClose(p.GetValue(col, Nothing), col)) 

     Return colorproperty.Name 

    Catch ex As Exception 

     Return ("unnamed color") 

    End Try 

End Function 

我不得不搭上nullreference例外,一位不願透露姓名的顏色在執行此功能時。爲什麼,我不知道。