Udostępnij za pośrednictwem


Jak zarejestrować dołączoną właściwość (WPF .NET)

W tym artykule opisano sposób rejestrowania dołączonej właściwości i udostępniania publicznych metod dostępu, które umożliwiają dostęp do dołączonej właściwości za pomocą języka Extensible Application Markup Language (XAML) i kodu. Dołączone właściwości umożliwiają ustawianie dodatkowych par właściwości/wartości dla dowolnego elementu XAML, mimo że element nie definiuje tych dodatkowych właściwości w modelu obiektów. Dodatkowe właściwości są dostępne globalnie. Dołączone właściwości są zwykle definiowane jako wyspecjalizowana forma właściwości zależności, która nie ma konwencjonalnej otoki właściwości. Większość dołączonych właściwości dla typów WPF (Windows Presentation Foundation) jest również implementowana jako właściwości zależności. Właściwości zależności można tworzyć na dowolnym typie pochodnym DependencyObject .

Przykład

W poniższym przykładzie pokazano, jak zarejestrować dołączoną właściwość jako właściwość zależności przy użyciu RegisterAttached metody . Klasa dostawcy ma możliwość określenia wartości domyślnej w metadanych właściwości. Aby uzyskać więcej informacji na temat metadanych właściwości, zobacz Metadane właściwości zależności. W tym przykładzie HasFish właściwość ma typ wartości z wartością domyślną ustawioną Boolean na falsewartość .

Klasa dostawcy dla dołączonej właściwości musi zawierać statyczne metody metod dostępu get/set, które są zgodne z konwencją Get<property name> nazewnictwa i Set<property name>. Czytnik XAML używa metod dostępu do rozpoznawania atrybutu XAML dla dołączonej właściwości i rozpoznawania jej wartości do odpowiedniego typu. Te metody dostępu są niezbędne, nawet jeśli dołączona właściwość nie jest zarejestrowana jako właściwość zależności.

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

Zobacz też