Cómo implementar una propiedad de dependencia (WPF .NET)

En este artículo se describe cómo implementar una propiedad de dependencia mediante un campo DependencyProperty para realizar una copia de seguridad de una propiedad de Common Language Runtime (CLR). Las propiedades de dependencia admiten varias características avanzadas del sistema de propiedades de Windows Presentation Foundation (WPF). Estas características incluyen estilos, enlace de datos, herencia, animación y valores predeterminados. Si desea que las propiedades que defina admitan esas características, implemente las propiedades como una propiedad de dependencia.

Ejemplo

En el ejemplo siguiente se muestra cómo registrar una propiedad de dependencia mediante una llamada al método Register. El método Register devuelve una instancia DependencyProperty denominada un identificador de propiedad. El identificador se almacena en un campo static readonly y contiene el nombre y las características de una propiedad de dependencia.

El campo identificador debe seguir la convención de nomenclatura <property name>Property. Por ejemplo, si registra una propiedad de dependencia con el nombre Location, el campo de identificador debe denominarse LocationProperty. Si no sigue este patrón de nomenclatura, es posible que los diseñadores de WPF no informen correctamente de la propiedad y que algunos aspectos de la aplicación de estilo del sistema de propiedades no se comporten según lo previsto.

En el ejemplo siguiente el nombre de la propiedad de dependencia y su descriptor de acceso CLR es HasFish, por lo que el campo de identificador se denomina HasFishProperty. El tipo de propiedad de dependencia es Boolean y el tipo de propietario que registra la propiedad de dependencia es Aquarium.

Puede especificar metadatos predeterminados para una propiedad de dependencia. En este ejemplo se establece un valor predeterminado de false para la propiedad de dependencia HasFish.

public class Aquarium : DependencyObject
{
    public static readonly DependencyProperty HasFishProperty =
        DependencyProperty.Register(
            name: "HasFish",
            propertyType: typeof(bool),
            ownerType: typeof(Aquarium),
            typeMetadata: new FrameworkPropertyMetadata(defaultValue: false));

    public bool HasFish
    {
        get => (bool)GetValue(HasFishProperty);
        set => SetValue(HasFishProperty, value);
    }
}
Public Class Aquarium
    Inherits DependencyObject

    Public Shared ReadOnly HasFishProperty As DependencyProperty =
    DependencyProperty.Register(
        name:="HasFish",
        propertyType:=GetType(Boolean),
        ownerType:=GetType(Aquarium),
        typeMetadata:=New FrameworkPropertyMetadata(defaultValue:=False))

    Public Property HasFish As Boolean
        Get
            Return GetValue(HasFishProperty)
        End Get
        Set(value As Boolean)
            SetValue(HasFishProperty, value)
        End Set
    End Property

End Class

Para obtener más información sobre cómo y por qué implementar una propiedad de dependencia en lugar de, simplemente, hacer una copia de seguridad de una propiedad CLR con un campo privado, consulte Información general sobre las propiedades de dependencia.

Vea también