CoerceValueCallback 代理人

定義

依存関係プロパティの値が再評価されたり強制が明示的に要求されたりした場合に必ず呼び出されるメソッドのテンプレートを提供します。

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 

パラメーター

d
DependencyObject

プロパティが存在するオブジェクト。 コールバックが呼び出されると、プロパティ システムがこの値を渡します。

baseValue
Object

強制が試行される前のプロパティの新しい値。

戻り値

Object

強制された (適切な型の) 値。

次の例には、別のプロパティの値など、他の入力に基づいて依存関係プロパティの格納されている値を強制するための、このコールバックの実装が含まれています。 この場合、コールバックは、プロパティがボタンを持つシャツの種類に対応しているかどうかを確認します。その場合、の初期の既定色を設定します。これに ShirtType より、シャツの種類に ButtonColor ボタンがない場合は、 ButtonColor 値が開始値に強制的に変換されます

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 、いくつかの異なる手法を使用して依存関係プロパティに割り当てることができます。 これらの各手法では、最初に新しいプロパティメタデータオブジェクト ( PropertyMetadata または、などの派生クラス) を作成する必要があり FrameworkPropertyMetadata ます。 パラメーターを受け取るコンストラクターシグネチャを使用してメタデータオブジェクトを作成 coerceValueCallback し、そのパラメーターをコールバックハンドラーに割り当てます。 または、任意のシグネチャによってメタデータを作成し、 CoerceValueCallback メタデータを使用する前にプロパティを設定します。

このメタデータがある場合は、次のことができます。

  • のシグネチャを使用して、新しいクラスで新しい依存関係プロパティを定義します。このとき、 Register メタデータを値として指定し typeMetadata ます。

  • OverrideMetadata(Type, PropertyMetadata)依存関係プロパティを所有するクラスから派生する場合は、既存の依存関係プロパティのメタデータ (呼び出し) をオーバーライドします。

  • DependencyObject 呼び出して、新しいメタデータを使用して、既存の依存関係プロパティを新しいクラスに追加し AddOwner(Type, PropertyMetadata) ます。

このコールバックの実装では、の値を確認 baseValue し、値または型のいずれかに基づいて、さらに強制的に変換する必要がある値かどうかを判断する必要があります。

CoerceValueCallback依存関係プロパティのは、プロパティシステムまたは他の呼び出し元がインスタンスでを呼び出すたびに呼び出され CoerceValue DependencyObject 、そのプロパティの識別子をとして指定し dp ます。

プロパティ値に対する変更は、プロパティシステムの任意の参加要素から取得された可能性があります。 これには、スタイル、汎用無効化、トリガー、プロパティ値の継承、およびローカルの値の設定が含まれます。

一般に、特定の依存関係プロパティに対して複数のを指定することは避けてください CoerceValueCallback (をオーバーライドするか、既にを持っている依存関係プロパティの新しいメタデータを使用して追加 CoerceValueCallback します)。 コールバックの1つだけが動作することができます。アクションコールバックは、呼び出し元と比較して、継承の最派生クラスに適用されたものになり DependencyObject ます。 所有者階層の上位に存在していた依存関係プロパティのメタデータに割り当てられた他のコールバックは、メタデータがオーバーライドされると置き換えられます。

拡張メソッド

GetMethodInfo(Delegate)

指定したデリゲートによって表されるメソッドを表すオブジェクトを取得します。

適用対象

こちらもご覧ください