次の方法で共有


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

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

戻り値

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

次の例には、他のプロパティの値など、他の入力に基づいて依存関係プロパティの格納された値を強制する、このコールバックの実装が含まれています。 この場合、コールバックは、プロパティがボタンを持つシャツの種類に対応しているかどうかを 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依存関係プロパティの新しいメタデータをオーバーライドまたは追加します)。 動作できるのは、いずれかのコールバックのみです。動作コールバックは、呼び出し元と比較して継承で最も派生したクラスに DependencyObject 適用されたコールバックです。 所有者階層の上位に存在する依存関係プロパティのメタデータに割り当てられた他のコールバックは、メタデータがオーバーライドされるときに置き換えられます。

拡張メソッド

GetMethodInfo(Delegate)

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

適用対象

こちらもご覧ください