Практическое руководство. Добавление типа владельца для свойства зависимостей
В этом примере показано, как добавить класс в качестве владельца свойства зависимостей, зарегистрированные для другого типа. Таким образом, WPF XAML чтения и система свойств способны распознать класс в качестве дополнительного владельца свойства. Добавление в качестве владельца при необходимости позволяет добавлять класс для предоставления метаданных определенного типа.
В следующем примере StateProperty
свойство регистрируется путем MyStateControl
класса. Класс UnrelatedStateControl
добавляет себя в качестве владельца StateProperty
с помощью AddOwner метода, в частности с помощью подпись, которая обеспечивает более новые метаданные для свойства зависимостей, так как оно существует в типе добавление. Обратите внимание, что необходимо предоставить CLR методы доступа для свойства, как показано в примере реализация свойства зависимостей пример, а также повторно предоставить идентификатор свойства зависимостей для класса, добавляемого в как владелец.
Без оболочки свойства зависимостей по-прежнему будет работать с точки зрения программный доступ с помощью 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); }
}
}