Jak zaimplementować właściwość zależności (WPF .NET)

W tym artykule opisano sposób implementowania właściwości zależności przy użyciu DependencyProperty pola do obsługi właściwości środowiska uruchomieniowego języka wspólnego (CLR). Właściwości zależności obsługują kilka zaawansowanych funkcji systemu właściwości Windows Presentation Foundation (WPF). Te funkcje obejmują style, powiązanie danych, dziedziczenie, animację i wartości domyślne. Jeśli chcesz zdefiniować właściwości do obsługi tych funkcji, zaimplementuj właściwości jako właściwość zależności.

Ważne

Dokumentacja przewodnika dla komputerów dla platform .NET 7 i .NET 6 jest w budowie.

Przykład

W poniższym przykładzie pokazano, jak zarejestrować właściwość zależności, wywołując metodę Register . Metoda Register zwraca DependencyProperty wystąpienie o nazwie identyfikator właściwości zależności. Identyfikator jest przechowywany w static readonly polu i zawiera nazwę i cechy właściwości zależności.

Pole identyfikatora musi być zgodne z konwencją <property name>Propertynazewnictwa . Jeśli na przykład zarejestrujesz właściwość zależności o nazwie Location, pole identyfikatora powinno mieć nazwę LocationProperty. Jeśli nie uda Ci się postępować zgodnie z tym wzorcem nazewnictwa, projektanci WPF mogą nie zgłaszać właściwości poprawnie, a aspekty aplikacji stylu systemu właściwości mogą nie zachowywać się zgodnie z oczekiwaniami.

W poniższym przykładzie nazwa właściwości zależności i jej metody dostępu CLR to HasFish, więc pole identyfikatora ma nazwę HasFishProperty. Typ właściwości zależności to Boolean i typ właściciela rejestrujący właściwość zależności to Aquarium.

Możesz określić domyślne metadane dla właściwości zależności. W tym przykładzie ustawiono wartość false domyślną dla HasFish właściwości zależności.

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

Aby uzyskać więcej informacji na temat sposobu i dlaczego zaimplementować właściwość zależności, a nie tylko tworzenie kopii zapasowej właściwości CLR z polem prywatnym, zobacz Omówienie właściwości zależności.

Zobacz też