我知道我可以走很长的路线......
但这感觉就像严重的矫枉过正。
有更简单的方法吗?
答案 0 :(得分:91)
var color = (Color)ColorConverter.ConvertFromString("Red");
答案 1 :(得分:14)
新的更好的答案
当然,ColorConverter是要走的路。致电ColorConverter.ConvertFromString并投射结果。不可否认,这将涉及拳击。如果你想避免装箱,建立一个字典,最开始使用标准名称(仍然使用ColorConverter),然后使用字典进行后续查找。
原始回答
您可以非常轻松地将System.Windows.Media.Colors中的属性名称和值一次性地提取到地图中:
private static readonly Dictionary<string, Color> KnownColors = FetchColors();
public static Color FromName(string name)
{
return KnownColors[name];
}
private static Dictionary<string, Color> FetchColors()
{
// This could be simplified with LINQ.
Dictionary<string, Color> ret = new Dictionary<string, Color>();
foreach (PropertyInfo property in typeof(Colors).GetProperties())
{
ret[property.Name] = (Color) property.GetValue(null);
}
return ret;
}
这有点难看,但这是一次性打击。
答案 2 :(得分:11)
System.Windows.Media.ColorConverter是XamlReader的用法。
var result = ColorConverter.ConvertFromString("Red") as Color;
答案 3 :(得分:1)
此代码可以更快地将名称翻译为Color
类:
public class FastNameToColor
{
Dictionary<string, Color> Data = new Dictionary<string, Color>();
public FastNameToColor()
{
System.Reflection.PropertyInfo[] lColors = typeof(System.Drawing.Color).GetProperties();
foreach (PropertyInfo pi in lColors)
{
object val = pi.GetValue(null, null);
if (val is Color)
{
Data.Add(pi.Name, (Color)val);
}
}
}
public Color GetColor(string Name)
{
return Data[Name];
}
}
您可以展开此代码,直接将名称翻译为Media.Color
。
答案 4 :(得分:1)
Fyi,另一种更简单的方法就是使用microsoft build static class,ex Colors.Red
http://msdn.microsoft.com/en-us/library/windows/desktop/bb189018.aspx
答案 5 :(得分:0)
这段代码在c#、wpf中更容易Convert Hex字符串刷机
var brush = (Brush)new
System.Windows.Media.BrushConverter().ConvertFromString("#28808080");