Практическое руководство. Добавление типа владельца для свойства зависимости
Обновлен: Ноябрь 2007
В этом примере демонстрируется способ добавления класса в качестве владельца свойства зависимостей, зарегистрированного для другого типа. Выполняя это, средство чтения данныхWPFXAML и система свойств способны распознать класс в качестве дополнительного владельца свойства. Добавление в качестве владельца при необходимости позволяет добавлять класс для предоставления метаданных определенного типа.
В следующем примере StateProperty является свойством, зарегистрированным классом MyStateControl. Класс UnrelatedStateControl добавляет себя в качестве владельца StateProperty с помощью метода AddOwner, специальным образом использующего подпись, доступную для новых метаданных свойства зависимостей, так как она существует в добавленном типе. Обратите внимание, что следует предоставить методы доступа среда CLR (common language runtime) для свойства, как показано в примере Практическое руководство. Реализация свойства зависимостей, а также повторно предоставить идентификатор свойства зависимостей для класса, добавляемого в качестве владельца.
Без оболочки свойство зависимости будет по-прежнему работать с точки зрения программного доступа с помощью GetValue или SetValue. Однако, чаще всего требуется параллельное поведение системы свойств и оболочек свойств CLR. Оболочки облегчают программную установку свойства зависимости и обеспечивают установку свойств в качестве атрибутов XAML.
Сведения о том, как переопределить метаданные по умолчанию, содержатся в разделе Практическое руководство. Переопределение метаданных для свойств зависимости.
Пример
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 UnrelatedStateControl : Control
{
public UnrelatedStateControl() { }
public static readonly DependencyProperty StateProperty = MyStateControl.StateProperty.AddOwner(typeof(UnrelatedStateControl), new PropertyMetadata(true));
public Boolean State
{
get { return (Boolean)this.GetValue(StateProperty); }
set { this.SetValue(StateProperty, value); }
}
}