DependencyProperty Странное поведение

Я попробовал это, просто чтобы посмотреть, что произойдет, и это сработало, но я понятия не имею, почему так. Может кто-нибудь объяснить мне, что происходит на фоне 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, но он может использовать его. Может кто-нибудь сказать мне, что происходит под капотом?

1 ответ

Решение

Я погуглил изображение, которое я хотел бы показать вам. Смотрите ссылку ниже, и концепция DP хорошо документирована.

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

И давайте перейдем непосредственно к сути, когда вы приглашаете и используете MyControl в своем приложении, содержащийся DP автоматически регистрируется. Вот почему DP использует статический префикс. По причине static readonly в декларации DP, пожалуйста, прочитайте ссылку /questions/47202558/pochemu-svojstvo-dependency-obyavleno-kak-staticheskoe-tolko-dlya-chteniya/47202587#47202587 (цитируемый ответ Приянка).

Другие вопросы по тегам