DependencyProperty.UnsetValue 属性

定义

指定一个静态值,该静态值由属性系统使用,而不是 null 指示属性存在,但不由属性系统或任何应用代码设置其值。

public:
 static property Platform::Object ^ UnsetValue { Platform::Object ^ get(); };
static IInspectable UnsetValue();
public static object UnsetValue { get; }
var object = DependencyProperty.unsetValue;
Public Shared ReadOnly Property UnsetValue As Object

属性值

Object

Platform::Object

IInspectable

未设置值的 sentinel 值。

示例

此示例使用 ReadLocalValue 检查现有本地值。 如果存在本地值,如不返回 UnsetValue指示的那样,则通过调用 ClearValue 删除现有的本地值。

public static bool ClearSetProperty(DependencyObject targetObject, DependencyProperty targetDP)
{
    if (targetObject == null || targetDP == null)
    {
        throw new ArgumentNullException();
    }
    object localValue = targetObject.ReadLocalValue(targetDP);
    if (localValue == DependencyProperty.UnsetValue)
    {
        return false;
    }
    else
    {
        targetObject.ClearValue(targetDP);
        return true;
    }
}

注解

UnsetValue 是一个 sentinel 值,用于依赖属性系统无法确定请求的依赖属性值的情况。 使用 UnsetValue 而不是 null,因为 null 是大多数引用类型值的有效属性值,并且是依赖属性的元数据中常用的 DefaultValue

UnsetValue 永远不会从 DependencyObject.GetValue 调用中返回。 为依赖属性调用 DependencyObject.GetValue 时,以下条件之一始终为 true:

  • 依赖属性具有在元数据中建立的默认值,并返回该值。 此值可能来自属性元数据的 DefaultValuenull这可能是 。
  • 其他一些值是通过值优先级 (例如,应用了样式,或者) 计算了 Binding ,并且默认值不再相关。 即使专门设置了 ,也可能是 null。 有关值优先级的详细信息,请参阅 依赖属性概述

当尚未在本地设置请求的属性时,DependencyObject.ReadLocalValue 将返回 UnsetValue

注意

不要使用默认值 UnsetValue注册依赖属性。 这将给属性使用者带来混乱,并且会在属性系统中产生意外的后果。

UnsetValue 应在转换器无法转换源值的任何情况下,从 IValueConverter 实现返回,该实现在数据绑定中提供到依赖属性的转换。 转换器不应在 IValueConverter.Convert 中引发该情况的异常,这些异常将显示为运行时异常,你需要在 UnhandledException 中为 这些异常添加处理,或者更糟,但在用户看来是实际的运行时异常。 转换器实现应遵循常规绑定模式,即任何失败的绑定不执行任何操作且不提供值, UnsetValue 而不是 null 绑定引擎理解的该情况的 sentinel 值。 有关详细信息,请参阅深入了解数据绑定

适用于

另请参阅