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


Реализация свойства зависимостей (WPF .NET)

В этой статье описывается, как реализовать свойство зависимостей с помощью DependencyProperty поля для резервного копирования свойства среды CLR. Свойства зависимостей поддерживают несколько расширенных функций системы свойств Windows Presentation Foundation (WPF). Эти функции включают стили, привязку данных, наследование, анимацию и значения по умолчанию. Если вы хотите, чтобы свойства, которые вы определили для поддержки этих функций, реализуйте свойства в качестве свойства зависимостей.

Пример

В следующем примере показано, как зарегистрировать свойство зависимостей путем вызова Register метода. Метод Register возвращает экземпляр, DependencyProperty называемый идентификатором свойства зависимостей. Идентификатор хранится в static readonly поле и содержит имя и характеристики свойства зависимости.

Поле идентификатора должно соответствовать соглашению <property name>Propertyоб именовании. Например, если вы регистрируете свойство зависимостей с именем Location, поле идентификатора должно быть названо LocationProperty. Если вы не выполнили этот шаблон именования, конструкторы WPF могут неправильно сообщать о своем свойстве, а аспекты приложения системного стиля свойств могут не вести себя должным образом.

В следующем примере имя свойства зависимостей и его метод доступа CLR имеет значение HasFish, поэтому поле идентификатора называется HasFishProperty. Тип свойства зависимостей — Boolean это тип владельца, который регистрирует свойство Aquariumзависимостей.

Можно указать метаданные по умолчанию для свойства зависимостей. В этом примере устанавливается значение false по умолчанию для HasFish свойства зависимостей.

public class Aquarium : DependencyObject
{
    public static readonly DependencyProperty HasFishProperty =
        DependencyProperty.Register(
            name: "HasFish",
            propertyType: typeof(bool),
            ownerType: typeof(Aquarium),
            typeMetadata: new FrameworkPropertyMetadata(defaultValue: false));

    public bool HasFish
    {
        get => (bool)GetValue(HasFishProperty);
        set => SetValue(HasFishProperty, value);
    }
}
Public Class Aquarium
    Inherits DependencyObject

    Public Shared ReadOnly HasFishProperty As DependencyProperty =
    DependencyProperty.Register(
        name:="HasFish",
        propertyType:=GetType(Boolean),
        ownerType:=GetType(Aquarium),
        typeMetadata:=New FrameworkPropertyMetadata(defaultValue:=False))

    Public Property HasFish As Boolean
        Get
            Return GetValue(HasFishProperty)
        End Get
        Set(value As Boolean)
            SetValue(HasFishProperty, value)
        End Set
    End Property

End Class

Дополнительные сведения о том, как и почему реализовать свойство зависимостей, а не просто резервное копирование свойства СРЕДЫ CLR с частным полем, см . в обзоре свойств зависимостей.

См. также