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 (цитируемый ответ Приянка).