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.

Anuncios

2 comentarios el “Tips SilverLight: Obtener Color de un Hexadecimal

  1. Pingback: Agenda de la Comunidad « MSExpertos

  2. Pingback: Tips SilverLight: Extraer el Color Hexadecimal a String | Alex Jiménez

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s