我知道我可以走很长的路了......
添加对System.Drawing的引用
从字符串创建System.Drawing.Color
从System.Drawing.Color的ARGB值创建System.Windows.Media.Color.
但这感觉就像严重的矫枉过正.
有没有更简单的方法?
var color = (Color)ColorConverter.ConvertFromString("Red");
新的更好的答案
当然,ColorConverter是要走的路.调用ColorConverter.ConvertFromString并转换结果.不可否认,这将涉及拳击.如果你想避免装箱,建立一个字典,最开始使用标准名称(仍然使用ColorConverter),然后使用字典进行后续查找.
原始答案
您可以相当轻松地将System.Windows.Media.Colors中的属性名称和值一次提取到地图中:
private static readonly DictionaryKnownColors = FetchColors(); public static Color FromName(string name) { return KnownColors[name]; } private static Dictionary FetchColors() { // This could be simplified with LINQ. Dictionary ret = new Dictionary (); foreach (PropertyInfo property in typeof(Colors).GetProperties()) { ret[property.Name] = (Color) property.GetValue(null); } return ret; }
这有点难看,但这是一次性打击.
System.Windows.Media.ColorConverter是XamlReader的工作方式.
var result = ColorConverter.ConvertFromString("Red") as Color;