通过


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 并在使用元数据之前设置属性。

拥有此元数据后,可以:

此回调的实现应检查值 baseValue ,并根据值或类型确定这是需要进一步强制的值。

每当属性系统或任何其他调用方对实例调用时,将调用依赖属性的属性的标识符指定为 <a0/>。

对属性值的更改可能来自属性系统中任何可能的参与者。 这包括样式、泛型无效、触发器、属性值继承和本地值设置。

通常,应避免为任何给定的依赖属性指定多个 CoerceValueCallback 依赖项属性(重写或添加已具有 CoerceValueCallback依赖项属性的新元数据)。 只有一个回调能够执行操作。与调用方相比 DependencyObject ,代理回调将应用于继承中派生最多的类。 当重写元数据时,将替换分配给依赖属性的元数据的其他回调,因为它存在于所有者层次结构中的较高位置。

扩展方法

名称 说明
GetMethodInfo(Delegate)

获取一个对象,该对象表示由指定委托表示的方法。

适用于

另请参阅