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

时间:2016-02-20 16:19:02

标签: c# wpf windows-runtime winrt-xaml win-universal-app

我是WPF开发人员。我很想知道GetValue的{​​{1}}和ReadLocalValue方法有什么区别?我知道DependencyObject可用于实现依赖属性,如下所示:

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... } 的目的是什么?我可以从MSDN sample获得的是,它可能会返回ReadLocalValue,这并不能说明多少。

1 个答案:

答案 0 :(得分:2)

这似乎是关于它的。在大多数情况下,是的,它已经习惯了

  

返回本地值,如果没有设置本地值,则返回sentinel值UnsetValue

根据MSDN Reference

  

对于大多数典型的" get&#34>你应该使用GetValue。依赖属性的操作。对于未在本地设置值的各种情况,ReadLocalValue不返回有效值。

     

由样式,主题,模板,元数据的默认值或属性值继承设置的值不被视为本地值。但是,绑定和其他表达式在被评估后被认为是本地值。

     

如果未设置本地值,则此方法返回UnsetValue。

     

如果返回的值不是UnsetValue,则可以查询所请求的依赖项属性的元数据,以确定是否存在可以将返回值转换为更具体的类型。