WPF/UWP:DependencyObject 的 GetValue() 和 ReadLocalValue() 有什么区别?

3
我是一名WPF开发人员。我很好奇知道DependencyObjectGetValueReadLocalValue方法之间有什么区别?我知道GetValue可以用来实现一个依赖属性,就像这样:
public static DependencyProperty FoobarProperty =
     DependencyProperty.Register(nameof(Foobar),
         typeof(int),
         typeof(DeclaringClass),
         new PropertyMetadata(0, OnFoobarChanged));

public int Foobar
{
     get { return (int)GetValue(FoobarProperty); }
     set { SetValue(FoobarProperty, value); }
}

private static void OnFoobarChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
     var newValue = (int)e.NewValue;
    // do something with the new value...
}

简单来说,ReadLocalValue有什么作用?从MSDN示例中我只能了解到它可能返回DependencyProperty.UnsetValue,这并没有提供太多信息。

2
请参阅依赖属性值优先级以了解依赖属性值的可能来源。该文章还提到“本地值”,阅读后应该明白ReadLocalValue的作用。 - Clemens
1个回答

2
这似乎就是全部了。大多数情况下,是用来返回本地值,如果没有设置本地值,则返回特殊值UnsetValue。
根据MSDN 参考
你应该在大多数典型的“获取”操作中使用GetValue来获取依赖属性的值。ReadLocalValue在各种情况下不会返回有效值,其中值未在本地设置。
被样式、主题、模板、元数据的默认值或属性值继承设置的值不被视为本地值。但是,在评估后,绑定和其他表达式被视为本地值。
当没有设置本地值时,此方法将返回UnsetValue。
如果返回值不是UnsetValue,则可以查询所请求的依赖属性的元数据,以确定是否有更具体的类型可以将返回值转换为。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接