Partilhar via


Como registrar uma propriedade anexada (WPF .NET)

Este artigo descreve como registrar uma propriedade anexada e fornecer acessadores públicos que permitem acessar a propriedade anexada por meio de XAML (Extensible Application Markup Language) e código. As propriedades anexadas permitem que pares extras de propriedade/valor sejam definidos em qualquer elemento XAML, mesmo que o elemento não defina essas propriedades extras em seu modelo de objeto. As propriedades extras são acessíveis globalmente. As propriedades anexadas são normalmente definidas como uma forma especializada de propriedade de dependência que não possui um envoltório convencional de propriedade. A maioria das propriedades anexadas para tipos do Windows Presentation Foundation (WPF) também são implementadas como propriedades de dependência. Você pode criar propriedades de dependência em qualquer tipo derivado de DependencyObject.

Exemplo

O exemplo a seguir mostra como registrar uma propriedade anexada como uma propriedade de dependência, usando o método RegisterAttached. A classe provider tem a opção de especificar um valor padrão em metadados de propriedade. Para obter mais informações sobre metadados de propriedade, consulte Metadados de propriedade de dependência. Neste exemplo, a propriedade HasFish tem um tipo de valor Boolean, com seu valor padrão definido como false.

A classe provedora para uma propriedade anexada deve fornecer métodos acessores estáticos de get/set que sigam a convenção de nomenclatura Get<property name> e Set<property name>. O leitor XAML usa os acessadores para reconhecer o atributo XAML para a propriedade anexada e resolver seu valor para o tipo apropriado. Esses acessadores são necessários mesmo que uma propriedade anexada não esteja registrada como uma propriedade de dependência.

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

Ver também