Come registrare una proprietà associata (WPF .NET)

Questo articolo descrive come registrare una proprietà associata e fornire funzioni di accesso pubbliche che consentono di accedere alla proprietà associata tramite XAML (Extensible Application Markup Language) e codice. Le proprietà associate consentono l'impostazione di coppie proprietà/valore aggiuntive su qualsiasi elemento XAML, anche se l'elemento non definisce tali proprietà aggiuntive nel modello a oggetti. Le proprietà aggiuntive sono accessibili a livello globale. Le proprietà associate vengono in genere definite come una forma specializzata di proprietà di dipendenza che non dispone di un wrapper di proprietà convenzionale. La maggior parte delle proprietà associate per i tipi Windows Presentation Foundation (WPF) viene implementata anche come proprietà di dipendenza. È possibile creare proprietà di dipendenza in qualsiasi DependencyObject tipo derivato.

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à associata come proprietà di dipendenza usando il RegisterAttached metodo . La classe provider ha la possibilità di specificare un valore predefinito nei metadati delle proprietà. Per altre informazioni sui metadati delle proprietà, vedere Metadati delle proprietà di dipendenza. In questo esempio la HasFish proprietà ha un Boolean tipo valore, con il relativo valore predefinito impostato su false.

La classe provider per una proprietà associata deve fornire metodi di accesso get/set statici che seguono la convenzione Get<property name> di denominazione e Set<property name>. Il lettore XAML usa le funzioni di accesso per riconoscere l'attributo XAML per la proprietà associata e risolverne il valore nel tipo appropriato. Queste funzioni di accesso sono necessarie anche se una proprietà associata non è registrata come proprietà di dipendenza.

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

Vedi anche