Comment inscrire une propriété jointe (WPF .NET)

Cet article explique comment inscrire une propriété jointe et fournir des accesseurs publics qui vous permettent d’accéder à la propriété jointe via XAML (Extensible Application Markup Language) et du code. Les propriétés jointes permettent aux paires propriété/valeur supplémentaires d’être définies sur n’importe quel élément XAML, même si l’élément ne définit pas ces propriétés supplémentaires dans son modèle objet. Les propriétés supplémentaires sont globalement accessibles. Les propriétés jointes sont généralement définies comme une forme spécialisée de propriété de dépendance qui n’a pas de wrapper de propriété conventionnelle. La plupart des propriétés jointes pour les types WPF (Windows Presentation Foundation) sont également implémentées en tant que propriétés de dépendance. Vous pouvez créer des propriétés de dépendance sur n’importe quel DependencyObject type dérivé.

Important

La documentation du Guide du bureau pour .NET 7 et .NET 6 est en cours de construction.

Exemple

L’exemple suivant montre comment inscrire une propriété jointe en tant que propriété de dépendance à l’aide de la RegisterAttached méthode. La classe de fournisseur a la possibilité de spécifier une valeur par défaut dans les métadonnées de propriété. Pour plus d’informations sur les métadonnées de propriété, consultez Métadonnées de propriété de dépendance. Dans cet exemple, la HasFish propriété a un Boolean type valeur, avec sa valeur par défaut définie sur false.

La classe de fournisseur d’une propriété jointe doit fournir des méthodes d’accesseur get/set statiques qui suivent la convention Get<property name> d’affectation de noms et Set<property name>. Le lecteur XAML utilise les accesseurs pour reconnaître l’attribut XAML de la propriété jointe et résoudre sa valeur en type approprié. Ces accesseurs sont nécessaires même si une propriété jointe n’est pas inscrite en tant que propriété de dépendance.

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

Voir aussi