Поскольку свойства находятся не в экземпляре, а присоединены, то есть они определены статически в классе Grid
, а значения хранятся в контейнере свойств за пределами обычной системы свойств.
Если у вас есть DockPanel
внутри Grid
, вы используете Grid.Column
, чтобы указать, в каком столбце должен находиться DockPanel
. Следовательно, они могут быть очень полезными. Присоединенные свойства зависимостей также могут быть унаследованы от родительского дерева.
Для получения дополнительной информации прочитайте эту ссылку:
http://www.abhisheksur.com/2011/07/internals-of-dependency-property-in-wpf.html
Если мы возьмем пример Grid.Column
, внутреннее устройство таково, что где-то в классе Grid
лежит такое определение:
public static readonly DependencyProperty ColumnProperty =
DependencyProperty.RegisterAttached(
"Column",
typeof(int),
typeof(Grid),
new PropertyMetadata(0));
Приведенный выше код — это фактически все, что нужно для объявления прикрепленного свойства зависимостей. Обратите внимание, что здесь нет ни геттера, ни сеттера, а свойство является статическим. Все это декларация поведения — нет никакой логики для ее сохранения или извлечения.
Это связано с тем, что WPF имеет собственное внутреннее хранилище для свойств зависимостей (DP). Обычный DP также не имеет резервных полей в классах. Другими словами, все DP хранятся внутри WPF. Однако WPF по-прежнему отслеживает, какие значения принадлежат каким экземплярам, поэтому по-прежнему можно хранить Width = 20
вместо TextBox1
. Это также означает, что можно хранить значения, которые даже не определены в самих классах, как в случае с присоединенными DP.
Поскольку нет правил, для которых можно установить элементы управления Grid.Column
, их можно хранить даже в элементах управления, которые не являются дочерними элементами элемента управления Grid.
person
Troels Larsen
schedule
08.04.2016