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 实例作为键参数传递。

适用于

另请参阅