2013-05-29 3 views
1

В Windows Phone (или Silverlight) нет System.Windows.Media.ColorConverter, поэтому мне нужен другой способ, чтобы взять строку, содержащую имя цвета, например. «Красный» и создать из него объект Color.Windows Phone string to color

Я нашел эту возможность, но она не работает как colorType.GetProperty всегда возвращает null.

public static Color ConvertFromString(string colorString) 
{ 
    Color retval = Colors.Transparent; 

    Type colorType = (typeof(Colors)); 

    if (colorType.GetProperty(colorString) != null) 
    { 
     object o = colorType.InvokeMember(colorString, 
      BindingFlags.GetProperty, null, null, null); 

     if (o != null) 
     { 
      retval = (Color)o; 
     } 
    } 

    return retval; 
} 

Любые идеи?

+0

Я люблю оба ответа и оба работа хорошо. Единственная причина, по которой я не отмечал XAML, был ответом на то, что он не был чувствительным к регистру. Если colorName «RED», это не работает. Не уверен, что более эффективно. –

ответ

2

Попробуйте это:

public static Color GetColor(String ColorName) 
{ 
    Type colors = typeof(System.Windows.Media.Colors); 
    foreach(var prop in colors.GetProperties()) 
    { 
     if(prop.Name == ColorName) 
      return ((System.Windows.Media.Color)prop.GetValue(null, null)); 
    } 

    throw new Exception("No color found"); 
} 
2

Не пробовал на WP, но в SL вы можете угнать XAML для этого (а также для SolidColorBrush и такие):

private Color StringToColor(string colorName) 
    { 
     string xaml = string.Format("<Color xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">{0}</Color>", colorName); 
     try { return (Color)XamlReader.Load(xaml); } 
     catch { return Colors.Transparent; } 
    }