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

Questo articolo descrive come implementare una proprietà di dipendenza usando un campo per eseguire il DependencyProperty 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 Desktop Guide 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 Register metodo restituisce un'istanza DependencyProperty denominata 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 dell'identificatore deve essere denominato LocationProperty. Se non si segue questo modello di denominazione, le finestre di progettazione WPF potrebbero non segnalare correttamente la proprietà e gli aspetti dell'applicazione di stile del sistema di 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 dell'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 di false per 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, invece di eseguire il backup di una proprietà CLR con un campo privato, vedere Panoramica delle proprietà di dipendenza.

Vedi anche