DependencyPropertyKey.OverrideMetadata(Type, PropertyMetadata) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
この依存関係プロパティ識別子によって表される読み取り専用の依存関係プロパティのメタデータをオーバーライドします。
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 インスタンスをキー パラメーターとして渡します。