CoerceValueCallback 委托
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
为每当重新评估依赖属性值或专门请求强制调用的方法提供模板。
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
参数
属性所在的对象。 调用回调时,属性系统将传递此值。
- 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 依赖项属性(重写或添加已具有 CoerceValueCallback依赖项属性的新元数据)。 只有一个回调能够执行操作。与调用方相比 DependencyObject ,代理回调将应用于继承中派生最多的类。 当重写元数据时,将替换分配给依赖属性的元数据的其他回调,因为它存在于所有者层次结构中的较高位置。
扩展方法
| 名称 | 说明 |
|---|---|
| GetMethodInfo(Delegate) |
获取一个对象,该对象表示由指定委托表示的方法。 |