DependencyProperty.UnsetValue 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
指定一个静态值,该静态值由属性系统使用,而不是 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
属性值
未设置值的 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:
- 依赖属性具有在元数据中建立的默认值,并返回该值。 此值可能来自属性元数据的 DefaultValue。
null
这可能是 。 - 其他一些值是通过值优先级 (例如,应用了样式,或者) 计算了 Binding ,并且默认值不再相关。 即使专门设置了 ,也可能是
null
。 有关值优先级的详细信息,请参阅 依赖属性概述。
当尚未在本地设置请求的属性时,DependencyObject.ReadLocalValue 将返回 UnsetValue
。
注意
不要使用默认值 UnsetValue
注册依赖属性。 这将给属性使用者带来混乱,并且会在属性系统中产生意外的后果。
UnsetValue
应在转换器无法转换源值的任何情况下,从 IValueConverter 实现返回,该实现在数据绑定中提供到依赖属性的转换。 转换器不应在 IValueConverter.Convert 中引发该情况的异常,这些异常将显示为运行时异常,你需要在 UnhandledException 中为 这些异常添加处理,或者更糟,但在用户看来是实际的运行时异常。 转换器实现应遵循常规绑定模式,即任何失败的绑定不执行任何操作且不提供值, UnsetValue
而不是 null
绑定引擎理解的该情况的 sentinel 值。 有关详细信息,请参阅深入了解数据绑定。