Tips SilverLight: Obtener Color de un Hexadecimal

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.

Un comentario sobre “Tips SilverLight: Obtener Color de un Hexadecimal”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *