CoerceValueCallback CoerceValueCallback CoerceValueCallback CoerceValueCallback Delegate

定義

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

パラメーター

d
DependencyObject DependencyObject DependencyObject DependencyObject

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

baseValue
Object Object Object Object

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

戻り値

System.Object

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

継承
CoerceValueCallbackCoerceValueCallbackCoerceValueCallbackCoerceValueCallback

次の例には、別のプロパティの値などの他の入力に基づく依存関係プロパティの格納されている値を強制的にこのコールバックの実装が含まれます。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とそのプロパティの識別子を指定する、インスタンス、 dpThe 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.

1 つ以上指定することを避ける必要があります通常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.

Extension Methods

GetMethodInfo(Delegate) GetMethodInfo(Delegate) GetMethodInfo(Delegate) GetMethodInfo(Delegate)

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

適用対象

こちらもご覧ください