Muchas veces estamos creando un control desde código y no tenemos el color de manera directo si no un valor proveniente de la base de datos algo así como el siguiente ejemplo:
TextBlock textBlock = new TextBlock(); textBlock.Text="Prueba de Foreground"; textBlock.Foreground = new SolidColorBrush("#FF7277FE"); //Esto esta Mal
Donde el código anterior esta mal por que el SolidColorBrush recibe como parámetro un dato de tipo Color, es por ello que se debe tener el siguiente código que lo declare en una clase estática para así tener mi método de extensión.
public static class ExtensionesColores { public static Color ToColorFromHex(this string s) { if (s.StartsWith("#")) { s = s.Substring(1); } byte a = System.Convert.ToByte(s.Substring(0, 2), 16); byte r = System.Convert.ToByte(s.Substring(2, 2), 16); byte g = System.Convert.ToByte(s.Substring(4, 2), 16); byte b = System.Convert.ToByte(s.Substring(6, 2), 16); return Color.FromArgb(a, r, g, b); }public static Color ToColorFromString(this string colorString) { Type colorType = (typeof(Colors)); if (colorType.GetProperty(colorString) != null) { object color = colorType.InvokeMember(colorString , BindingFlags.GetProperty, null, null, null); if (color != null) { return (Color)color; } } else { try { System.Text.StringBuilder sb = new System.Text.StringBuilder(); sb.Append("<Line xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation"); sb.Append(" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" "); sb.AppendFormat(" Fill="{0}" />", colorString); Line lne = (Line)XamlReader.Load(sb.ToString()); return (Color)lne.Fill.GetValue(SolidColorBrush.ColorProperty); } catch { } } throw new InvalidCastException("Color no definido"); }
Lo que en corrección al código que mostramos al inicio de declarar un control quedaría de esta manera:
TextBlock textBlock = new TextBlock(); textBlock.Text = "Prueba de Foreground"; textBlock.Foreground = new SolidColorBrush("#FF7277FE".ToColorFromHex());
Espero que le sea de mucha ayuda.
En el articulo anterior les mostré como asignar un String a Color pero en esta ocasión