Cambio de color de un control silverlight utilizando parámetros

lunes, 27 de abril de 2009

Si se quiere parametrizar los colores de nuestros controles Silverlight2, recibiendo los valores exadecimales por parámetro deberiamos seguir los siguientes pasos:


  1. Pasar el valor del color como parámetro como una cadena de texto

  2. Convertir esta cadena de texto en un color

  3. Asignar el nuevo color al control



Pasar el valor del color como parámetro como una cadena de texto y recogerlo

if (initParams.ContainsKey("ColorFondo")) {
ChangeBackgroudColor(initParams["ColorFondo"]);
}


Asignar el nuevo color al control

private void ChangeBackgroudColor(string colorHexadecimal) {
Color cc = HexStringToColor(colorHexadecimal);
this.contenedor.SetValue(Canvas.BackgroundProperty, new SolidColorBrush(cc));
}


Convertir esta cadena de texto en un color


///
/// Extract only the hex digits from a string.
///

public static string ExtractHexDigits(string input) {
// remove any characters that are not digits (like #)
Regex isHexDigit = new Regex("[abcdefABCDEF\\d]+");
string newnum = "";
foreach (char c in input) {
if (isHexDigit.IsMatch(c.ToString()))
newnum += c.ToString();
}
return newnum;
}


///
/// Convert a hex string to a .NET Color object.
///

/// a hex string: "FFFFFF", "#000000"
public static Color HexStringToColor(string hexColor) {
string hc = ExtractHexDigits(hexColor);
if (hc.Length != 6) {
return Colors.Transparent;
}
string r = hc.Substring(0, 2);
string g = hc.Substring(2, 2);
string b = hc.Substring(4, 2);
Color color;
try {
color = Color.FromArgb(100,
System.Convert.ToByte(r, 16),
System.Convert.ToByte(g, 16),
System.Convert.ToByte(b, 16));
} catch {
// you can choose whether to throw an exception
//throw new ArgumentException("Conversion failed.");
return Colors.Transparent;
}
return color;
}



Enlaces relacionados :

Paso de parámetros de inicialización a aplicaciones Silverlight 2


- FIN -

0 comentarios: