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 キー パラメーターとして渡されます。

適用対象

こちらもご覧ください