Gewusst wie: Implementieren einer Abhängigkeitseigenschaft (WPF .NET)

In diesem Artikel wird beschrieben, wie Sie eine Abhängigkeitseigenschaft mithilfe eines DependencyProperty Felds implementieren, um eine gemeinsame Sprach-Runtime (CLR)-Eigenschaft zu sichern. Abhängigkeitseigenschaften unterstützen mehrere erweiterte Windows Presentation Foundation (WPF)-Eigenschaftssystemfeatures. Diese Features umfassen Formatvorlagen, Datenbindung, Vererbung, Animation und Standardwerte. Wenn Sie Eigenschaften festlegen möchten, die Sie definieren, um diese Features zu unterstützen, implementieren Sie Ihre Eigenschaften als Abhängigkeitseigenschaft.

Wichtig

Der Desktopleitfaden zu .NET 7 und .NET 6 ist in Bearbeitung.

Beispiel

Im folgenden Beispiel wird zunächst eine Abhängigkeitseigenschaft registriert, indem die Register-Methode aufgerufen wird. Die Methode gibt eine Register Instanz zurück, die DependencyProperty als Abhängigkeitseigenschaftsbezeichner bezeichnet wird. Der Bezeichner wird in einem static readonly Feld gespeichert und enthält den Namen und die Merkmale einer Abhängigkeitseigenschaft.

Das Bezeichnerfeld muss der Benennungskonvention <property name>Property folgen. Wenn Sie beispielsweise eine Abhängigkeitseigenschaft mit dem Namen Locationregistrieren, sollte das Bezeichnerfeld benannt LocationPropertywerden. Wenn Sie sich nicht an dieses Benennungsmuster halten, melden die WPF-Designer Ihre Eigenschaft möglicherweise nicht korrekt, und Aspekte der Anwendung im Stil des Eigenschaftssystems verhalten sich möglicherweise nicht wie erwartet.

Im folgenden Beispiel lautet der NameHasFish der Abhängigkeitseigenschaft und dessen CLR-Accessor, so dass das Bezeichnerfeld benannt HasFishPropertywird. Der Abhängigkeitseigenschaftstyp ist Boolean und der Besitzertyp, der die Abhängigkeitseigenschaft registriert, ist Aquarium.

Sie können die standardmäßigen Metadaten für eine Abhängigkeitseigenschaft angeben. In diesem Beispiel wird ein Standardwert false für die HasFish Abhängigkeitseigenschaft festgelegt.

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

Weitere Informationen dazu, wie und warum eine Abhängigkeitseigenschaft implementiert wird, anstatt eine CLR-Eigenschaft nur mit einem privaten Feld zu sichern, finden Sie unter Übersicht über Abhängigkeitseigenschaften.

Weitere Informationen