CreateDefaultValueCallback 委托
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示可作为 PropertyMetadata 构造函数的一部分调用以延迟依赖属性默认值定义的方法。
public delegate Platform::Object ^ CreateDefaultValueCallback();
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.Guid(2139130885, 10948, 23257, 172, 138, 38, 137, 3, 51, 216, 30)]
public delegate object CreateDefaultValueCallback();
Public Delegate Function CreateDefaultValueCallback() As Object
返回值
Platform::Object
所需的默认值。
- 属性
示例
此示例演示在自定义依赖属性方案中使用 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 值),可能会遇到与依赖属性工作方式相关的线程问题。 所有 DependencyObject 对象始终在 UI 线程上创建。 但是,注册属性的线程和最终使用对象实例并尝试访问默认值的线程可能不是同一 UI 线程。 如果在 PropertyMetadata 中而不是固定实例中提供 CreateDefaultValueCallback,则会实时创建该属性的默认值,并保证实际使用该属性的线程能够访问该属性。 换句话说,作为 的 属性会延迟默认值,但所使用的 属性现在可以提供线程安全的默认值。
典型的 CreateDefaultValueCallback 只应调用用作值的引用类型的构造函数,并设置该引用类型的属性,然后返回它。
若要在 PropertyMetadata 实例中指定 CreateDefaultValueCallback,必须使用 PropertyMetadata.Create 创建实例,而不是 PropertyMetadata 构造函数。