I have a configuration file where a developer can specify a text color by passing in a string:

 <text value="Hello, World" color="Red"/>

Rather than have a gigantic switch statement look for all of the possible colors, it'd be nice to just use the properties in the class System.Drawing.Brushes instead so internally I can say something like:

 Brush color = Brushes.Black;   // Default

 // later on...
 this.color = (Brush)Enum.Parse(typeof(Brush), prasedValue("color"));

Except that the values in Brush/Brushes aren't enums. So Enum.Parse gives me no joy. Suggestions?

  • Note that Color and Brush is not the same thing, you seem to be mixing them up – Lucas May 22 '09 at 20:18

Recap of all previous answers, different ways to convert a string to a Color or Brush:

// best, using Color's static method
Color red1 = Color.FromName("Red");

// using a ColorConverter
TypeConverter tc1 = TypeDescriptor.GetConverter(typeof(Color)); // ..or..
TypeConverter tc2 = new ColorConverter();
Color red2 = (Color)tc.ConvertFromString("Red");

// using Reflection on Color or Brush
Color red3 = (Color)typeof(Color).GetProperty("Red").GetValue(null, null);

// in WPF you can use a BrushConverter
SolidColorBrush redBrush = (SolidColorBrush)new BrushConverter().ConvertFromString("Red");
| improve this answer | |
  • 1
    Mind adding how you'd do this with WPF's XAML as well? – Chuck Savage Jun 5 '13 at 17:10
  • I get this error: Error 1 'System.Windows.Media.Color' does not contain a definition for 'FromName' VS Express 2012, and I am in a standard WPF application codebehind. – Matt Apr 7 '15 at 18:55
  • 1
    @Matt FromColor() is a member of Windows.Drawing.Color which is not a WPF class. – escape-llc Aug 11 '15 at 14:07

String to brush:

myTextBlock.Foreground = new BrushConverter().ConvertFromString("#FFFFFF") as SolidColorBrush;

That's my case here!

| improve this answer | |
  • System.Drawing.ColorTranslator has FromHtml() and ToHtml() – Lucas May 22 '09 at 20:05
  • 2
    Also note that this requires .Net 3.0 or later – Lucas May 22 '09 at 20:12

A brush can be declared like this

Brush myBrush = new SolidBrush(Color.FromName("Red"));
| improve this answer | |
  • 1
    +1 An alternative is: Brush aBrush = new SolidBrush(Color.FromArgb(240, 240, 240)); – John M Dec 21 '09 at 15:13

D'oh. After a while of looking I found:


After hitting "post". From there it's a short step to:

 color = new SolidBrush(Color.FromName(a.Value));

I'll leave this question here for others....

| improve this answer | |
  • Strictly speaking, it's a "coincidence" that the static properties on Brushes use the same name as the static properties on Color. However, that's probably nothing to worry about. – Jon B Dec 16 '08 at 21:12

You could use reflection for this:

Type t = typeof(Brushes);
Brush b = (Brush)t.GetProperty("Red").GetValue(null, null);

Of course, you'll want some error handling/range checking if the string is wrong.

| improve this answer | |

I agree that using TypeConverters are the best method:

 Color c = (Color)TypeDescriptor.GetConverter(typeof(Color)).ConvertFromString("Red");
 return new Brush(c);
| improve this answer | |

Try using a TypeConverter. Example:

var tc = TypeDescriptor.GetConverter(typeof(Brush));

Another alternative is to use reflection, and go over the properties in SystemBrushes.

| improve this answer | |
  • TypeDescriptor cannot convert from string to Brush. It can convert string to Color, though... – Lucas May 22 '09 at 20:10

If you want, you can extend this even more and allow them to specify values for the R, G and B values. Then you just call Color.FromArgb(int r, int g, int b);

| improve this answer | |

You can use System.Drawing.KnownColor enum. It specifies all known system colors.

| improve this answer | |

Your Answer

