Partilhar via


Como implementar uma propriedade de dependência (WPF .NET)

Este artigo descreve como implementar uma propriedade de dependência usando um campo DependencyProperty para apoiar uma propriedade CLR (Common Language Runtime). As propriedades de dependência suportam vários recursos avançados do sistema de propriedades do Windows Presentation Foundation (WPF). Esses recursos incluem estilos, vinculação de dados, herança, animação e valores padrão. Se você quiser que as propriedades definidas ofereçam suporte a esses recursos, implemente suas propriedades como uma propriedade de dependência.

Exemplo

O exemplo a seguir mostra como registrar uma propriedade de dependência, chamando o método Register. O método Register retorna uma instância DependencyProperty chamada identificador de propriedade de dependência . O identificador é armazenado em um campo static readonly e contém o nome e as características de uma propriedade de dependência.

O campo identificador deve seguir a convenção de nomenclatura <property name>Property. Por exemplo, se você registrar uma propriedade de dependência com o nome Location, o campo identificador deverá ser nomeado LocationProperty. Se você não seguir esse padrão de nomenclatura, os designers do WPF podem não relatar sua propriedade corretamente e aspetos do aplicativo de estilo do sistema de propriedades podem não se comportar conforme o esperado.

No exemplo a seguir, o nome do da propriedade de dependência e seu acessador CLR é HasFish, portanto, o campo identificador é nomeado HasFishProperty. O tipo de propriedade de dependência é Boolean e o tipo de proprietário que registra a propriedade de dependência é Aquarium.

Você pode especificar metadados padrão para uma propriedade de dependência. Este exemplo define um valor padrão de false para a propriedade HasFish dependency.

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 obter mais informações sobre como e por que implementar uma propriedade de dependência, em vez de apenas apoiar uma propriedade CLR com um campo privado, consulte Visão geral das propriedades de dependência.

Ver também