CoerceValueCallback 代理人


依存関係プロパティの値が再評価されたり強制が明示的に要求されたりした場合に必ず呼び出されるメソッドのテンプレートを提供します。Provides a template for a method that is called whenever a dependency property value is being re-evaluated, or coercion is specifically requested.

public delegate System::Object ^ CoerceValueCallback(DependencyObject ^ d, System::Object ^ baseValue);
public delegate object CoerceValueCallback(DependencyObject d, object baseValue);
type CoerceValueCallback = delegate of DependencyObject * obj -> obj
Public Delegate Function CoerceValueCallback(d As DependencyObject, baseValue As Object) As Object 



プロパティが存在するオブジェクト。The object that the property exists on. コールバックが呼び出されると、プロパティ システムがこの値を渡します。When the callback is invoked, the property system will pass this value.


強制が試行される前のプロパティの新しい値。The new value of the property, prior to any coercion attempt.



強制された (適切な型の) 値。The coerced value (with appropriate type).


次の例には、別のプロパティの値など、他の入力に基づいて依存関係プロパティの格納されている値を強制するための、このコールバックの実装が含まれています。The following example includes an implementation of this callback to coerce the stored value of a dependency property based on other inputs, such as another property's value. この場合、コールバックは、プロパティがボタンを持つシャツの種類に対応しているかどうかを確認し ShirtType ます。その場合、の初期の既定色を設定します。これに ButtonColor より、シャツの種類にボタンがない場合は ButtonColor 、値を開始値に UIUI 変換しますIn this case, the callback checks to see whether the ShirtType property corresponds to a type of shirt that has buttons; if so it establishes a starting default color for the ButtonColor, if the shirt type has no buttons, it coerces the ButtonColor value back to a starting value, which causes the UIUI (not shown) to remove that dropdown from the effective choices.

private static object CoerceButtonColor(DependencyObject d, object value)
    ShirtTypes newShirtType = (d as Shirt).ShirtType;
    if (newShirtType == ShirtTypes.Dress || newShirtType == ShirtTypes.Bowling)
        return ButtonColors.Black;				
    return ButtonColors.None;
Private Shared Function CoerceButtonColor(ByVal d As DependencyObject, ByVal value As Object) As Object
    Dim newShirtType As ShirtTypes = (TryCast(d, Shirt)).ShirtType
    If newShirtType = ShirtTypes.Dress OrElse newShirtType = ShirtTypes.Bowling Then
        Return ButtonColors.Black
    End If
    Return ButtonColors.None
End Function


に基づくコールバックは CoerceValueCallback 、いくつかの異なる手法を使用して依存関係プロパティに割り当てることができます。Callbacks based on CoerceValueCallback can be assigned to a dependency property through several different techniques. これらの各手法では、最初に新しいプロパティメタデータオブジェクト ( PropertyMetadata または、などの派生クラス) を作成する必要があり FrameworkPropertyMetadata ます。Each of these techniques requires that you first create a new property metadata object (PropertyMetadata, or a derived class such as FrameworkPropertyMetadata). パラメーターを受け取るコンストラクターシグネチャを使用してメタデータオブジェクトを作成 coerceValueCallback し、そのパラメーターをコールバックハンドラーに割り当てます。Create the metadata object using a constructor signature that takes the coerceValueCallback parameter, and assign that parameter to your callback handler. または、任意のシグネチャによってメタデータを作成し、 CoerceValueCallback メタデータを使用する前にプロパティを設定します。Or construct the metadata by any signature and set the CoerceValueCallback property prior to putting the metadata in use.

このメタデータがある場合は、次のことができます。When you have this metadata, you can:

  • のシグネチャを使用して、新しいクラスで新しい依存関係プロパティを定義します。このとき、 Register メタデータを値として指定し typeMetadata ます。Define a new dependency property on a new class, using either signature of Register, giving the metadata as the typeMetadata value.

  • OverrideMetadata(Type, PropertyMetadata)依存関係プロパティを所有するクラスから派生する場合は、既存の依存関係プロパティのメタデータ (呼び出し) をオーバーライドします。Override the metadata (call OverrideMetadata(Type, PropertyMetadata)) for an existing dependency property, when you derive from the class that owns the dependency property.

  • DependencyObject 呼び出して、新しいメタデータを使用して、既存の依存関係プロパティを新しいクラスに追加し AddOwner(Type, PropertyMetadata) ます。Add an existing dependency property to a new DependencyObject class, using new metadata, by calling AddOwner(Type, PropertyMetadata).

このコールバックの実装では、の値を確認 baseValue し、値または型のいずれかに基づいて、さらに強制的に変換する必要がある値かどうかを判断する必要があります。Implementations of this callback should check the value in baseValue and determine based on either the value or the type whether this is a value that needs to be further coerced.

CoerceValueCallback依存関係プロパティのは、プロパティシステムまたは他の呼び出し元がインスタンスでを呼び出すたびに呼び出され CoerceValue DependencyObject 、そのプロパティの識別子をとして指定し dp ます。The CoerceValueCallback for a dependency property is invoked any time that the property system or any other caller calls CoerceValue on a DependencyObject instance, specifying that property's identifier as the dp.

プロパティ値に対する変更は、プロパティシステムの任意の参加要素から取得された可能性があります。Changes to the property value may have come from any possible participant in the property system. これには、スタイル、汎用無効化、トリガー、プロパティ値の継承、およびローカルの値の設定が含まれます。This includes styles, generic invalidation, triggers, property value inheritance, and local value setting.

一般に、特定の依存関係プロパティに対して複数のを指定することは避けてください CoerceValueCallback (をオーバーライドするか、既にを持っている依存関係プロパティの新しいメタデータを使用して追加 CoerceValueCallback します)。Generally you should avoid specifying more than one CoerceValueCallback for any given dependency property (overriding or adding with new metadata for a dependency property that already had a CoerceValueCallback). コールバックの1つだけが動作することができます。アクションコールバックは、呼び出し元と比較して、継承の最派生クラスに適用されたものになり DependencyObject ます。Only one of the callbacks will be able to act. The acting callback will be the one that was applied to the most derived class in the inheritance as compared to the DependencyObject caller. 所有者階層の上位に存在していた依存関係プロパティのメタデータに割り当てられた他のコールバックは、メタデータがオーバーライドされると置き換えられます。Other callbacks as assigned to metadata for the dependency property as it existed higher in the owner hierarchy are replaced when the metadata is overridden.



指定したデリゲートによって表されるメソッドを表すオブジェクトを取得します。Gets an object that represents the method represented by the specified delegate.