我试过这只是为了看看将会发生什么,它确实有效,但我不知道为什么会这样。有人可以在DependencyProperties
的背景下向我解释发生了什么吗?
我有一个声明DependencyProperty
的课程,但是在另一个课程中我使用DependencyProperty
和GetValue
定位SetValue
。
以下是一个例子:
public class DependencyProperties : DependencyObject
{
public Size EstimatedSize
{
get { return (Size)GetValue(EstimatedSizeProperty); }
set { SetValue(EstimatedSizeProperty, value); }
}
public static readonly DependencyProperty EstimatedSizeProperty =
DependencyProperty.Register("EstimatedSize", typeof(Size), typeof(DependencyProperties), null);
}
public class MyControl: ContentControl
{
public Size CalculatedSize
{
get { return (Size)GetValue(DependencyProperties.EstimatedSizeProperty); }
set { SetValue(DependencyProperties.EstimatedSizeProperty, value); }
}
protected override OnApplyTemplate()
{
// This works but why? How is it possible to do this? What is happening under the hood?
this.CalculatedSize = new Size(123, 123);
}
}
为什么可以这样做?这个例子的背景中发生了什么? MyControl类没有注册DP但它可以使用它。有人能告诉我幕后发生了什么吗?
答案 0 :(得分:0)
http://www.abhisheksur.com/2011/07/internals-of-dependency-property-in-wpf.html
而且,让我们直接进入底线,当您在应用程序中邀请和使用MyControl时,包含的DP会自动注册。
这就是DP使用静态前缀的原因。由于DP声明中static readonly
的原因,请阅读https://stackoverflow.com/a/5610015/361100链接(Priyank引用的答案)。