Практическое руководство. Реализация свойства зависимостей
В этом примере показано, как обеспечить поддержку свойства common language runtime (CLR) с использованием поля DependencyProperty, определяя тем самым свойство зависимостей. Если вы определяете собственные свойства и хотите, чтобы они поддерживали множество аспектов функциональности Windows Presentation Foundation (WPF), включая стили, привязку данных, наследование, анимацию и значения по умолчанию, следует реализовать их как свойство зависимостей.
Пример
В следующем примере сначала регистрируется свойство зависимостей путем вызова метода Register. Поле идентификатора, используемое для хранения имени и характеристик свойства зависимостей, должно иметь имя Name, которое выбирается для свойства зависимостей в составе вызова Register с добавлением строкового литерала Property. Например, если регистрируется свойство зависимостей с именем Name для поля Location, то поле идентификатора, определяемое для свойства зависимостей, должно называться LocationProperty.
В этом примере для свойства зависимостей и его метода доступа CLR используется имя State; поле идентификатора называется StateProperty; тип свойства — Boolean; тип, регистрирующий свойство зависимостей — MyStateControl.
Если не следовать этому шаблону именования, конструкторы могут неправильно обработать свойство, и определенные аспекты приложения стиля системы свойств могут работать не так, как ожидалось.
Для свойства зависимостей можно также указать используемые по умолчанию метаданные. В этом примере в качестве значения по умолчанию для свойства зависимостей State регистрируется значение false.
Public Class MyStateControl
Inherits ButtonBase
Public Sub New()
MyBase.New()
End Sub
Public Property State() As Boolean
Get
Return CType(Me.GetValue(StateProperty), Boolean)
End Get
Set(ByVal value As Boolean)
Me.SetValue(StateProperty, value)
End Set
End Property
Public Shared ReadOnly StateProperty As DependencyProperty = DependencyProperty.Register("State", GetType(Boolean), GetType(MyStateControl),New PropertyMetadata(False))
End Class
public class MyStateControl : ButtonBase
{
public MyStateControl() : base() { }
public Boolean State
{
get { return (Boolean)this.GetValue(StateProperty); }
set { this.SetValue(StateProperty, value); }
}
public static readonly DependencyProperty StateProperty = DependencyProperty.Register(
"State", typeof(Boolean), typeof(MyStateControl),new PropertyMetadata(false));
}
Дополнительные сведения о том, как и зачем реализовать свойство зависимостей в противоположность поддержке свойства CLR с использованием закрытого поля, см. в разделе Общие сведения о свойствах зависимости.
См. также
Основные понятия
Общие сведения о свойствах зависимости