Поделиться через


Практическое руководство. Добавление типа владельца для свойства зависимости

Обновлен: Ноябрь 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); }
  }
}

См. также

Основные понятия

Пользовательские свойства зависимостей

Общие сведения о свойствах зависимости