Silverlight DataGrid. Comportamiento extraño de HorizontalGridLinesBrush y VerticalGridLinesBrush

Haciendo algunas pruebas con el control DataGrid de Silverlight 2.0, he observado que si en el código XAML asigno valores a las propiedades HorizontalGridLinesBrush y VerticalGridLinesBrush de la siguiente forma.


<my:DataGrid x:Name=”grdDatos”
HorizontalGridlinesBrush=”Magenta”
VerticalGridlinesBrush=”Aquamarine”
…. />

Al ejecutar la aplicación, las líneas no toman los colores que previamente establecí 8-¿?.


Supongo que será cuestión de la fase beta en que se encuentra Silverlight, por lo que una solución a este curioso comportamiento del control consiste en aplicar valores a estas propiedades en el code-behind.


No obstante, a través del evento Loaded, que a priori podría parecer más adecuado para esta labor, tampoco conseguimos que las líneas de separación de las celdas muestren el color deseado.


Buscando un poco más entre los eventos de la clase DataGrid encontramos LayoutUpdated, con el cual parece que hemos tenido más éxito. Este evento se produce cuando la disposición de elementos que componen la interfaz de usuario ha sido actualizada; uno de los momentos en que ocurre es al comienzo de la ejecución del programa, por lo que parece adecuado su uso. Para utilizarlo en nuestra aplicación primeramente lo declaramos en XAML, de forma que el editor genere el método vacío en el code-behind.


<my:DataGrid x:Name=”grdDatos”
….
LayoutUpdated=”grdDatos_LayoutUpdated” />

A continuación escribimos la lógica de funcionamiento, donde asignamos el valor a cada una de las anteriormente mencionadas propiedades del control. Para evitar la repetición innecesaria de asignaciones de color a estas propiedades, previamente comprobamos si su contenido ya corresponde al color que necesitamos.


private void grdDatos_LayoutUpdated(object sender, EventArgs e)
{
if (((SolidColorBrush)this.grdDatos.HorizontalGridlinesBrush).Color != Colors.Magenta)
{
this.grdDatos.HorizontalGridlinesBrush = new SolidColorBrush(Colors.Magenta);
}

if (((SolidColorBrush)this.grdDatos.VerticalGridlinesBrush).Color != Colors.Cyan)
{
this.grdDatos.VerticalGridlinesBrush = new SolidColorBrush(Colors.Cyan);
}
}


El control resultante en tiempo de ejecución ahora sí que visualizará los colores de las líneas de separación correctamente, como vemos en la siguiente imagen.



Espero que os sirva de ayuda.


Un saludo.

Sin categoría

Deja un comentario

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