Cómo registrar una propiedad adjunta (WPF .NET)

En este artículo se describe cómo registrar una propiedad adjunta y proporcionar descriptores de acceso públicos que le permitan acceder a la propiedad adjunta a través de lenguaje XAML y código. Las propiedades adjuntas habilitan pares de propiedad/valor adicionales que puede establecer en cualquier elemento XAML aunque el elemento no defina esas propiedades adicionales en su modelo de objetos. Las propiedades adicionales son accesibles globalmente. Las propiedades adjuntas se definen normalmente como una forma especializada de propiedad de dependencia que no tiene un contenedor de propiedades convencional. La mayoría de las propiedades adjuntas para los tipos de Windows Presentation Foundation (WPF) también se implementan como propiedades de dependencia. Puede crear propiedades de dependencia en cualquier tipo derivado DependencyObject.

Importante

La documentación de la guía de escritorio para .NET 7 y .NET 6 está en proceso de elaboración.

Ejemplo

En el ejemplo siguiente se muestra cómo registrar una propiedad adjunta como una propiedad de dependencia mediante el método RegisterAttached. La clase de proveedor tiene la opción de especificar un valor predeterminado en los metadatos de propiedad. Para obtener más información sobre los metadatos de propiedades, consulte Metadatos de las propiedades de dependencia. En este ejemplo la propiedad HasFish tiene un tipo de valor de Boolean con su valor predeterminado establecido en false.

La clase de proveedor para una propiedad adjunta debe proporcionar métodos estáticos de descriptor de acceso get/set que sigan la convención de nomenclatura Get<property name> y Set<property name>. El lector XAML usa los descriptores de acceso para reconocer el atributo XAML de la propiedad adjunta y resolver su valor en el tipo adecuado. Estos descriptores de acceso son necesarios incluso si una propiedad adjunta no está registrada como una propiedad de dependencia.

public class Aquarium : UIElement
{
    // Register an attached dependency property with the specified
    // property name, property type, owner type, and property metadata.
    public static readonly DependencyProperty HasFishProperty =
        DependencyProperty.RegisterAttached(
          "HasFish",
          typeof(bool),
          typeof(Aquarium),
          new FrameworkPropertyMetadata(defaultValue: false,
              flags: FrameworkPropertyMetadataOptions.AffectsRender)
        );

    // Declare a get accessor method.
    public static bool GetHasFish(UIElement target) =>
        (bool)target.GetValue(HasFishProperty);

    // Declare a set accessor method.
    public static void SetHasFish(UIElement target, bool value) =>
        target.SetValue(HasFishProperty, value);
}
Public Class Aquarium
    Inherits UIElement

    ' Register an attached dependency property with the specified
    ' property name, property type, owner type, and property metadata.
    Public Shared ReadOnly HasFishProperty As DependencyProperty =
        DependencyProperty.RegisterAttached("HasFish", GetType(Boolean), GetType(Aquarium),
            New FrameworkPropertyMetadata(defaultValue:=False,
                flags:=FrameworkPropertyMetadataOptions.AffectsRender))

    ' Declare a get accessor method.
    Public Shared Function GetHasFish(target As UIElement) As Boolean
        Return target.GetValue(HasFishProperty)
    End Function

    ' Declare a set accessor method.
    Public Shared Sub SetHasFish(target As UIElement, value As Boolean)
        target.SetValue(HasFishProperty, value)
    End Sub

End Class

Vea también