依赖属性(Dependency Property)的默认值是注册依赖属性时,属性元数据制定的默认值参数。比如FrameworkPropertyMetadata类型的构造函数。默认值是依赖属性值优先级中最低的!
而依赖属性的本地值是由DependencyObject.SetValue方法所设置。通过DependencyObject.ReadLocalValue来获取。而DependencyObject.GetValue返回的是当前值,不是本地值。
比如这样一个再简单不过的依赖属性定义,默认值是0。
class Dobj : DependencyObject
{
public int MyProperty
{
get { return (int)GetValue(MyPropertyProperty); }
set { SetValue(MyPropertyProperty, value); }
}
public static readonly DependencyProperty MyPropertyProperty =
DependencyProperty.Register("MyProperty", typeof(int), typeof(Dobj), new FrameworkPropertyMetadata(0));
}
如果定义了依赖对象,那么由于其他更高优先级的依赖属性值没有被设置,所以GetValue(即CLR属性包装的依赖属性定义)会返回默认值,而本地值则会返回DependencyProperty.UnsetValue(因为它没有被设置)。
var dobj = new Dobj();
MessageBox.Show(dobj.My