CoerceValueCallback 委托

定义

为只要重新计算依赖项属性值或专门请求强制转换时就调用的方法提供一个模板。

C#
public delegate object CoerceValueCallback(DependencyObject d, object baseValue);

参数

d
DependencyObject

该属性所在的对象。 在调用该回调时,属性系统将会传递该值。

baseValue
Object

该属性在尝试执行任何强制转换之前的新值。

返回值

强制转换后的值(采用适当的类型)。

示例

以下示例包含此回调的实现,以基于其他输入(例如另一个属性的值)强制存储依赖属性的值。 在这种情况下,回调将检查 属性是否 ShirtType 对应于具有按钮的衬衫类型;如果这样,它会为 ButtonColor建立起始默认颜色,如果衬衫类型没有按钮,则会强制将值强制 ButtonColor 回起始值,从而导致 UI (不显示) 从有效选项中删除该下拉列表。

C#
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;
}

注解

基于 的 CoerceValueCallback 回调可以通过多种不同的技术分配给依赖属性。 其中每一种方法都要求首先创建一个新的属性元数据对象 (PropertyMetadata或派生类(如 FrameworkPropertyMetadata) )。 使用采用 coerceValueCallback 参数的构造函数签名创建元数据对象,并将该参数分配给回调处理程序。 或者通过任何签名构造元数据, CoerceValueCallback 并在使用元数据之前设置 属性。

拥有此元数据后,可以:

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

CoerceValueCallback每当属性系统或任何其他调用方对DependencyObject实例调用CoerceValue时,将依赖属性的 ,并将该属性的标识符指定为 dp

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

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

扩展方法

GetMethodInfo(Delegate)

获取指示指定委托表示的方法的对象。

适用于

产品 版本
.NET Framework 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9, 10

另请参阅