Поделиться через


Регистрация присоединенного свойства (WPF .NET)

В этой статье описывается, как зарегистрировать присоединенное свойство и предоставить общедоступные методы доступа, которые позволяют получить доступ к присоединенному свойству с помощью языка разметки расширяемых приложений (XAML) и кода. Присоединенные свойства позволяют задавать дополнительные пары свойств и значений для любого элемента XAML, даже если элемент не определяет эти дополнительные свойства в объектной модели. Дополнительные свойства доступны глобально. Присоединенные свойства обычно определяются как специализированная форма свойства зависимостей, которая не имеет обычной оболочки свойств. Большинство присоединенных свойств для типов Windows Presentation Foundation (WPF) также реализуются как свойства зависимостей. Вы можете создавать свойства зависимостей для любого DependencyObject производного типа.

Пример

В следующем примере показано, как зарегистрировать присоединенное свойство как свойство зависимостей с помощью метода RegisterAttached. Класс поставщика имеет параметр указания значения по умолчанию в метаданных свойств. Дополнительные сведения о метаданных свойств см. в разделе метаданных свойства зависимостей. В этом примере HasFish свойство имеет Boolean тип значения, для него задано falseзначение по умолчанию.

Класс поставщика для присоединенного свойства должен предоставлять статические методы доступа get/set, которые соответствуют соглашению Get<property name> об именовании и Set<property name>. Средство чтения XAML использует методы доступа, чтобы распознать атрибут XAML для присоединенного свойства и разрешить его значение соответствующему типу. Эти методы доступа необходимы, даже если присоединенное свойство не зарегистрировано в качестве свойства зависимостей.

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

См. также