Практическое руководство. Реализация свойства зависимостей
В этом примере показано, как обеспечить поддержку свойства поддержки общеязыковой среды выполнения CLR с помощью поля DependencyProperty, определив тем самым свойство зависимости. Если вы определяете собственные свойства и хотите, чтобы они поддерживали множество аспектов функциональности Windows Presentation Foundation (WPF), включая стили, привязку данных, наследование, анимацию и значения по умолчанию, следует реализовать их как свойства зависимостей.
Пример
В следующем примере показана первая регистрация свойства зависимости путем вызова метода Register. Поле идентификатора, используемое для хранения имени и характеристик свойства зависимости, должно иметь имя Name, которое выбирается для свойства зависимости при вызове Register, с добавлением строкового литерала Property
. Например, если регистрируется свойство зависимости с именем Name для поля Location
, то поле идентификатора, определяемое для свойства зависимости, должно называться LocationProperty
.
В этом примере для свойства зависимости и его метода доступа CLR используется имя State
; поле идентификатора называется StateProperty
; тип свойства — Boolean; тип, регистрирующий свойство зависимости, — MyStateControl
.
Если не следовать этому шаблону именования, конструкторы могут неправильно обработать свойство и определенные аспекты применения стиля в системе свойств могут работать не так, как ожидалось.
Для свойства зависимости можно также указать используемые по умолчанию метаданные. В этом примере в качестве значения по умолчанию для свойства зависимости State
регистрируется значение false
.
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));
}
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
Дополнительные сведения о том, как и зачем реализовывать свойство зависимости вместо предоставления закрытого поля для свойства CLR, см. в разделе Общие сведения о свойствах зависимости.
См. также
.NET Desktop feedback