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 キーパラメーターとして渡して、メソッドに転送します。

適用対象

こちらもご覧ください