DependencyPropertyKey.OverrideMetadata(Type, PropertyMetadata) Метод

Определение

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

public:
 void OverrideMetadata(Type ^ forType, System::Windows::PropertyMetadata ^ typeMetadata);
public void OverrideMetadata (Type forType, System.Windows.PropertyMetadata typeMetadata);
member this.OverrideMetadata : Type * System.Windows.PropertyMetadata -> unit
Public Sub OverrideMetadata (forType As Type, typeMetadata As PropertyMetadata)

Параметры

forType
Type

Тип, в котором существует данное свойство зависимостей и следует переопределить метаданные.

typeMetadata
PropertyMetadata

Метаданные, переданные для этого типа.

Исключения

Попытка переопределения метаданных в доступном для чтения и записи свойстве зависимостей (не может быть осуществлена с помощью данной сигнатуры).

Метаданные уже были установлены для свойства, так как они существуют в указанном типе.

Примеры

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

static Fishbowl() {
  Aquarium.AquariumSizeKey.OverrideMetadata(
    typeof(Aquarium),
    new PropertyMetadata(
      double.NaN,
      null,
      new CoerceValueCallback(CoerceFishbowlAquariumSize)
    )
  );
}

static object CoerceFishbowlAquariumSize(DependencyObject d,Object baseValue)
{
    //Aquarium is 2D, a Fishbowl is a round Aquarium, so the Size we return is the ellipse of that height/width rather than the rectangle
    Fishbowl fb = (Fishbowl)d;
    //other constraints assure that H,W are positive
    return Convert.ToInt32(Math.PI * (fb.Width / 2) * (fb.Height / 2));
}
Shared Sub New()
    Aquarium.AquariumSizeKey.OverrideMetadata(GetType(Aquarium), New PropertyMetadata(Double.NaN, Nothing, New CoerceValueCallback(AddressOf CoerceFishbowlAquariumSize)))
End Sub

Private Shared Function CoerceFishbowlAquariumSize(ByVal d As DependencyObject, ByVal baseValue As Object) As Object
    'Aquarium is 2D, a Fishbowl is a round Aquarium, so the Size we return is the ellipse of that height/width rather than the rectangle
    Dim fb As Fishbowl = CType(d, Fishbowl)
    'other constraints assure that H,W are positive
    Return Convert.ToInt32(Math.PI * (fb.Width / 2) * (fb.Height / 2))
End Function

Комментарии

Переопределение метаданных в свойстве зависимостей только для чтения выполняется по аналогичным причинам, так как переопределение метаданных для свойства зависимостей чтения и записи ограничено доступом на уровне ключа, так как поведение, указанное в метаданных, может изменить поведение набора (например, значение по умолчанию).

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

Этот метод эффективно перенаправит метод в OverrideMetadata метод, передав DependencyPropertyKey экземпляр в качестве ключевого параметра.

Применяется к

См. также раздел