CreateDefaultValueCallback 委托

定义

表示可以作为 PropertyMetadata 构造函数的一部分调用的方法,以延迟依赖属性默认值的定义。

public delegate Platform::Object ^ CreateDefaultValueCallback();
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.Guid(3605836076, 5557, 20168, 185, 92, 205, 210, 8, 240, 129, 83)]
class CreateDefaultValueCallback : MulticastDelegate
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.Guid(3605836076, 5557, 20168, 185, 92, 205, 210, 8, 240, 129, 83)]
public delegate object CreateDefaultValueCallback();
Public Delegate Function CreateDefaultValueCallback() As Object 

返回值

Object

Platform::Object

IInspectable

所需的默认值。

属性

Windows 要求

设备系列
Windows 10 (在 10.0.10240.0 中引入)
API contract
Windows.Foundation.UniversalApiContract (在 v1.0 中引入)

示例

此示例演示在自定义依赖属性方案中使用 CreateDefaultValueCallback 的伪代码。 具体来说,这会创建 PropertyMetadata 以用于 DependencyProperty.Register 调用 (不显示在) 。

PropertyMetadata metadata = PropertyMetadata.Create(
    new CreateDefaultValueCallback(() =>
    {
        return new CustomClass() //a DependencyObject
        {
            CustomProperty1 = "default", //DependencyProperty of type String 
            CustomProperty2 = -1; //DependencyProperty of type Int32
        }
    })

注解

注册自定义依赖属性时,可以提供 元数据 (PropertyMetadata 值) ,该值为依赖属性的所有使用提供默认值。 很多时候,直接在元数据中提供该值作为即时值就足够了。 这始终适用于任何值类型值,例如为 int 值属性指定默认值 -1。 但是,如果要报告作为引用属性的属性的默认值(例如 DependencyObject 值),可能会遇到与依赖属性工作方式相关的线程问题。 始终在 UI 线程上创建所有 DependencyObject 对象。 但是,注册 属性的线程和最终使用 对象的实例并尝试访问默认值的线程可能不是同一 UI 线程。 如果在 PropertyMetadata 而不是固定实例中提供 CreateDefaultValueCallback,则属性的默认值是实时创建的,并且保证实际使用 属性的线程能够访问。 换句话说,作为 寄存器的属性会延迟默认值,但所使用的 属性现在可以提供线程安全的默认值。

典型的 CreateDefaultValueCallback 只应为用作值的引用类型调用构造函数,并设置该引用类型的属性,然后返回它。

若要在 PropertyMetadata 实例中指定 CreateDefaultValueCallback,必须使用 PropertyMetadata.Create 来创建实例,而不是 PropertyMetadata 构造函数。

适用于

另请参阅