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 値を開始値に強制的に戻します。これにより、UI (表示されません) はそのドロップダウンが有効な選択肢から削除されます。

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)) をオーバーライドします。

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

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

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

プロパティ値の変更は、プロパティ システム内の任意の参加要素から行われる可能性があります。 これには、スタイル、ジェネリック無効化、トリガー、プロパティ値の継承、ローカル値の設定が含まれます。

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

拡張メソッド

GetMethodInfo(Delegate)

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

適用対象

こちらもご覧ください