Condividi tramite


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) sono implementate anche come proprietà dipendenti. È possibile creare proprietà di dipendenza in qualsiasi tipo derivato DependencyObject.

Esempio

Nell'esempio seguente viene illustrato come registrare una proprietà associata come proprietà di dipendenza usando il metodo RegisterAttached. La classe provider ha la possibilità di specificare un valore predefinito nei metadati delle proprietà. Per ulteriori informazioni sui metadati delle proprietà, vedere Metadati delle proprietà dipendenti. In questo esempio, la proprietà HasFish ha un tipo valore Boolean, con il valore predefinito impostato su false.

La classe fornitrice per una proprietà associata deve fornire metodi di accesso statici get/set che seguono la convenzione di naming Get<property name> e Set<property name>. Il lettore XAML utilizza le funzioni di accesso per riconoscere l'attributo XAML della proprietà connessa e assegnarne il valore al 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

Vedere anche