Compartilhar via


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

Este artigo descreve como implementar uma propriedade de dependência usando um DependencyProperty campo para dar suporte a uma propriedade CLR (Common Language Runtime). As propriedades de dependência dão suporte a 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 Register método. O Register método retorna uma DependencyProperty instância chamada identificador de propriedade de dependência. O identificador é armazenado em um static readonly campo e contém o nome e as características de uma propriedade de dependência.

O campo identificador deve seguir a convenção <property name>Propertyde nomenclatura. 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 poderão não relatar sua propriedade corretamente e os aspectos do aplicativo de estilo do sistema de propriedades poderão não se comportar conforme o esperado.

No exemplo a seguir, o nome da propriedade de dependência e seu acessador CLR é HasFish, portanto, o campo identificador é denominado 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 HasFish propriedade de dependência.

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 dar suporte a uma propriedade CLR com um campo privado, consulte Visão geral das propriedades de dependência.

Confira também