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


Практическое руководство. Переопределение метаданных для свойств зависимости

Обновлен: Ноябрь 2007

В этом примере демонстрируется переопределение метаданных свойства зависимости по умолчанию зависимости, взятых из наследованного класса, с помощью вызова метода OverrideMetadata и предоставления метаданных определенного типа.

Пример

Путем определения PropertyMetadata класс может определить поведение свойства зависимости, например, обратные вызовы значения по умолчанию и системы свойств. Многие классы свойства зависимости уже имеют метаданные по умолчанию, установленные как часть процесса их регистрации. Это включает свойства зависимости, которые являются частью WPFAPI-интерфейс. Класс, который наследует свойство зависимости через наследование, может переопределить исходные метаданные, так что характеристики свойства, которые могут изменяться через метаданные, будут соответствовать любым особым требованиям подкласса.

Переопределение метаданных в свойстве зависимости должно быть выполнена для этого свойства, используемого системой свойств (это соответствует случаю, когда создаются определенные экземпляры объектов, регистрирующие свойство). Вызов OverrideMetadata должен быть выполнен в статическом конструкторе типа, предоставляющего себя в качестве параметра forType для OverrideMetadata. При попытке изменить созданные метаданные существующего типа-владельца не возникнет исключения, но это приведет к несогласованному поведению в системе свойства. Кроме того, метаданные могут переопределяться один раз для каждого типа. Последующие попытки перезаписать метаданные для того же типа вызовут исключение.

В следующем примере пользовательский класс MyAdvancedStateControl переопределяет метаданные для StateProperty с помощью MyAdvancedStateControl с новыми метаданными свойства. Например, значение StateProperty по умолчанию является теперь true, если свойству поступает запрос на создание нового экземпляра MyAdvancedStateControl.

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 MyAdvancedStateControl : MyStateControl
{
  public MyAdvancedStateControl() : base() { }
  static MyAdvancedStateControl()
  {
    MyStateControl.StateProperty.OverrideMetadata(typeof(MyAdvancedStateControl), new PropertyMetadata(true));
  }
}

См. также

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

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

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

Ссылки

DependencyProperty

Другие ресурсы

Разделы пошагового руководства по свойствам

Примеры использования свойств