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;
    }
}
Public Shared Function ClearSetProperty(targetObject As DependencyObject, targetDP As DependencyProperty) As Boolean
    If targetObject Is Nothing Or targetDP Is Nothing Then
        Throw New ArgumentNullException()
    End If
    Dim localValue As Object = targetObject.ReadLocalValue(targetDP)
    If localValue = DependencyProperty.UnsetValue Then
        ClearSetProperty = False
    Else
        targetObject.ClearValue(targetDP)
        ClearSetProperty = True
    End If
End Function

注解

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

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

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

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

注意

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

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

适用于

另请参阅