2.19.2007

Propiedades Dependientes en WPF

En .NET 3.0 se introduce un nuevo tipo de propiedades que extienden la funcionalidad de las propiedades tradicionales del CLR de .NET. Varias de las clases de WPF exponen este tipo de propiedades. A primera vista, podemos utilizar estas propiedades de la misma forma como utilizamos propiedades cualquiera. Sin embargo, existen diferencias importantes de las cuales debemos estar conscientes para comprender mejor el funcionamiento de WPF. Las propiedades dependientes le ofrecen a la infraestructura de WPF un mecanismo simple para modificar su valor de manera dinámica. Esta capacidad de afectar dinámicamente el valor de una propiedad es utilizada por WPF para soportar la siguiente funcionalidad:

1. Soporte a Recursos

En WPF podemos establecer directamente el valor de una propiedad directamente ligada a un recurso utilizando XAML así:

<dockpanel.resources>
<solidcolorbrush color="Red" key="MiBrocha">
<dockpanel.resources/>
<button content="Soy rojo" background="{DynamicResource MyBrush}">

En este caso la propiedad Background toma su valor del recurso llamado MiBrocha. Para poder fijar una propiedad con el valor de un recurso es necesario que esta sea una propiedad dependiente.

2. Ligado a Datos (Data Binding)

El ligado a datos de WPF se establece igualmente utilizando propiedades dependientes.

<button content="{Binding XPath=Team/@TeamName}"/>

En este ejemplo el contenido del botón está ligado a una ruta específica definida con XPath dentro de una fuente de datos XML. Sin embargo, para el ligado de datos, aunque es necesario utilizar propiedades dependientes, hace falta además que estas implementen la interface INotifyPropertyChanged.

3. Estilos

El manejo de estilos de WPF depende también de las propiedades dependientes. Los estilos están relacionados con el sistema de propiedades porque típicamente contienen setters o triggers que afectan el valor de las propiedades como vimos con anterioridad.

4. Animación

La animación en WPF consiste en cambiar el valor de una propiedad a través del tiempo. Para esto WPF también utiliza las propiedades dependientes.

5. Herencia de Valores

La herencia de valores de propiedades no tiene nada que ver con la herencia tradicional de la programación orientada a objetos. La herencia de valores se trata de propagar el valor de una propiedad desde un objeto hacia sus hijos en un árbol. Por ejemplo, podemos definir una propiedad dependiente a nivel de un Grid. Los elementos que existen dentro del Grid
pueden heredar el valor de la propiedad dependiente del que se ha fijado. Esto simplifica, por ejemplo, que todos los elementos gráficos dentro de un contenedor compartan el color del fondo u alguna otra propiedad similar.

Gracias a la herencia de valores habilitada por las propiedades dependientes, los siguientes dos fragmentos de código producen exactamente el mismo resultado gráfico en WPF:

<window class="EjemplosSimples.PropiedadesDependientesDos" title="EjemplosSimples" width="414" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" x="http://schemas.microsoft.com/winfx/2006/xaml" height="123">
<stackpanel margin="20">
<textblock fontsize="20">Mi Blog es http://msdnfan.blogspot.com </textblock>
</stackpanel>
</window>

<window class="EjemplosSimples.PropiedadesDependientesUno" title="EjemplosSimples" width="414" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" fontsize="20" x="http://schemas.microsoft.com/winfx/2006/xaml" height="123">
<stackpanel margin="20">
<textblock>Mi Blog es http://msdnfan.blogspot.com </textblock>
</stackpanel>
</window>

¿Encuentras la diferencia? El tamaño de la fuente en el segundo caso se establece a nivel de la ventana mientras que en el primero se establece en el bloque de texto.

1 comentario:

Anónimo dijo...

Muy Chevre, bastante claro.
gracias