Registrieren einer angefügten Eigenschaft (WPF .NET)

In diesem Artikel wird beschrieben, wie Sie eine angefügte Eigenschaft registrieren und öffentliche Accessoren bereitstellen, mit denen Sie über Extensible Application Markup Language (XAML) und Code auf die angefügte Eigenschaft zugreifen können. Angefügte Eigenschaften ermöglichen das Festlegen zusätzlicher Eigenschafts-Wert-Paare für jedes XAML-Element, obwohl das Element diese zusätzlichen Eigenschaften im Objektmodell nicht definiert. Auf die zusätzlichen Eigenschaften kann global zugegriffen werden. Angefügte Eigenschaften werden in der Regel als spezielle Form der Abhängigkeitseigenschaft definiert, die keinen herkömmlichen Eigenschaften-Wrapper aufweist. Die meisten angefügten Eigenschaften für Windows Presentation Foundation -Typen (WPF) werden auch als Abhängigkeitseigenschaften implementiert. Sie können Abhängigkeitseigenschaften für jeden abgeleiteten DependencyObject-Typ erstellen.

Wichtig

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

Beispiel

Das folgende Beispiel zeigt, wie eine angefügte Eigenschaft mithilfe der RegisterAttached-Methode als Abhängigkeitseigenschaft registriert wird. Die Anbieterklasse hat die Möglichkeit, einen Standardwert in Eigenschaftenmetadaten anzugeben. Weitere Informationen zu Eigenschaftsmetadaten finden Sie unter Metadaten für Abhängigkeitseigenschaften. In diesem Beispiel weist die HasFish-Eigenschaft einen Boolean-Werttyp auf, wobei der Standardwert auf false festgelegt ist.

Die Anbieterklasse für eine angehängte Eigenschaft muss statische Get/Set-Accessor-Methoden bereitstellen, die der Namenskonvention Get<property name> und Set<property name> entspricht. Der XAML-Reader verwendet die Accessoren, um das XAML-Attribut für die angefügte Eigenschaft zu erkennen und seinen Wert in den entsprechenden Typ aufzulösen. Diese Accessoren sind auch dann erforderlich, wenn eine angefügte Eigenschaft nicht als Abhängigkeitseigenschaft registriert ist.

public class Aquarium : UIElement
{
    // Register an attached dependency property with the specified
    // property name, property type, owner type, and property metadata.
    public static readonly DependencyProperty HasFishProperty =
        DependencyProperty.RegisterAttached(
          "HasFish",
          typeof(bool),
          typeof(Aquarium),
          new FrameworkPropertyMetadata(defaultValue: false,
              flags: FrameworkPropertyMetadataOptions.AffectsRender)
        );

    // Declare a get accessor method.
    public static bool GetHasFish(UIElement target) =>
        (bool)target.GetValue(HasFishProperty);

    // Declare a set accessor method.
    public static void SetHasFish(UIElement target, bool value) =>
        target.SetValue(HasFishProperty, value);
}
Public Class Aquarium
    Inherits UIElement

    ' Register an attached dependency property with the specified
    ' property name, property type, owner type, and property metadata.
    Public Shared ReadOnly HasFishProperty As DependencyProperty =
        DependencyProperty.RegisterAttached("HasFish", GetType(Boolean), GetType(Aquarium),
            New FrameworkPropertyMetadata(defaultValue:=False,
                flags:=FrameworkPropertyMetadataOptions.AffectsRender))

    ' Declare a get accessor method.
    Public Shared Function GetHasFish(target As UIElement) As Boolean
        Return target.GetValue(HasFishProperty)
    End Function

    ' Declare a set accessor method.
    Public Shared Sub SetHasFish(target As UIElement, value As Boolean)
        target.SetValue(HasFishProperty, value)
    End Sub

End Class

Weitere Informationen