0

我尝试了这个只是为了看看会发生什么并且它确实有效,但我不知道为什么会这样。有人可以解释一下背景中发生了什么DependencyProperties吗?

我有一个声明 a 的类,DependencyProperty然后在另一个类中我DependencyProperty使用GetValueand来定位它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,但它可以使用它。有人可以告诉我引擎盖下发生了什么吗?

4

1 回答 1

0

我用谷歌搜索了我想给你看的图片。请参阅下面的链接,DP 的概念有据可查。

http://www.abhisheksur.com/2011/07/internals-of-dependency-property-in-wpf.html

而且,我们直接上底线,当你在你的应用中邀请和使用 MyControl 时,包含的 DP 会自动注册。这就是 DP 使用静态前缀的原因。由于static readonlyDP 声明中的原因,请阅读https://stackoverflow.com/a/5610015/361100链接(Priyank 引用的答案)。

于 2013-02-06T08:10:21.917 回答