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