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) 现有依赖属性的) 。
使用新 DependencyObject 元数据通过调用 AddOwner(Type, PropertyMetadata)将现有依赖属性添加到新类。
此回调的实现应检查 中的 baseValue
值,并根据值或类型确定此值是否需要进一步强制。
CoerceValueCallback每当属性系统或任何其他调用方对DependencyObject实例调用CoerceValue时,将依赖属性的 ,并将该属性的标识符指定为 dp
。
对属性值的更改可能来自属性系统中的任何可能的参与者。 这包括样式、泛型无效、触发器、属性值继承和本地值设置。
通常,应避免为任何给定的依赖属性指定多个 CoerceValueCallback , (重写或添加具有 CoerceValueCallback) 的依赖属性的新元数据。 只有一个回调能够执行操作。与调用方相比,操作回调将是应用于继承中派生最多类的 DependencyObject 回调。 当元数据被重写时,将替换分配给依赖属性的元数据的其他回调,因为它存在于所有者层次结构中的较高位置。
扩展方法
GetMethodInfo(Delegate) |
获取指示指定委托表示的方法的对象。 |