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 экземпляр в качестве ключевого параметра.