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


Реализация свойства зависимостей (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 с помощью закрытого поля, см. в Обзор свойств зависимости.

См. также