Практическое руководство. Реализация свойства зависимостей
В этом примере показано, как создавать резервные 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));
}
Дополнительные сведения о том, как и зачем реализовывать свойство зависимости вместо предоставления закрытого поля для свойства CLR, см. в разделе Общие сведения о свойствах зависимости.