0

何が起こるかを確認するためだけにこれを試してみましたが、うまくいきましたが、その理由はわかりません. の背景で何が起こっているのか誰か説明してもらえますかDependencyProperties?

a を宣言するクラスがありますが、別のクラスでは、 andを使用してDependencyPropertyそれをターゲットにしています。DependencyPropertyGetValueSetValue

次に例を示します。

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 を登録しませんでしたが、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 に答える