Come implementare una proprietà di dipendenza (WPF .NET)

Questo articolo descrive come implementare una proprietà di dipendenza usando un DependencyProperty campo per eseguire il backup di una proprietà CLR (Common Language Runtime). Le proprietà di dipendenza supportano diverse funzionalità avanzate del sistema di proprietà Windows Presentation Foundation (WPF). Queste funzionalità includono stili, data binding, ereditarietà, animazione e valori predefiniti. Se si desidera che le proprietà definite supportino tali funzionalità, implementare le proprietà come proprietà di dipendenza.

Importante

La documentazione di Guida desktop per .NET 7 e .NET 6 è in fase di costruzione.

Esempio

Nell'esempio seguente viene illustrato come registrare una proprietà di dipendenza chiamando il Register metodo . Il metodo restituisce un'istanza RegisterDependencyPropertydenominata identificatore di proprietà di dipendenza. L'identificatore viene archiviato in un static readonly campo e contiene il nome e le caratteristiche di una proprietà di dipendenza.

Il campo identificatore deve seguire la convenzione <property name>Propertydi denominazione . Ad esempio, se si registra una proprietà di dipendenza con il nome Location, il campo identificatore deve essere denominato LocationProperty. Se non è possibile seguire questo modello di denominazione, i progettisti WPF potrebbero non segnalare correttamente la proprietà e gli aspetti dell'applicazione di stile del sistema delle proprietà potrebbero non comportarsi come previsto.

Nell'esempio seguente il nome della proprietà di dipendenza e la relativa funzione di accesso CLR è HasFish, quindi il campo identificatore è denominato HasFishProperty. Il tipo di proprietà di dipendenza è Boolean e il tipo di proprietario che registra la proprietà di dipendenza è Aquarium.

È possibile specificare i metadati predefiniti per una proprietà di dipendenza. In questo esempio viene impostato un valore predefinito per false la HasFish proprietà di dipendenza.

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

Per altre informazioni su come e perché implementare una proprietà di dipendenza, anziché eseguire il backup di una proprietà CLR con un campo privato, vedere Panoramica delle proprietà di dipendenza.

Vedi anche