![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Наряду с обычными свойствами XAML также включает концепцию прикрепленных свойств, т.е. таких свойств, которые могут применяться одновременно к нескольким элементам управления, но определенных в другом классе. В WPF прикрепленные свойства часто применяются для управления компоновкой.
Это работает следующим образом. Каждый элемент управления имеет свой собственный набор внутренних свойств. Например, текстовое поле имеет специфический шрифт, цвет текста и текстовое содержимое. Все это определено такими свойствами, как Font Family, Foreground и Text. Когда элемент управления помещается внутри контейнера, то, в зависимости от типа контейнера, он может получить дополнительные свойства. Например, если поместить текстовое поле внутрь экранной сетки (grid), то возникает необходимость в том, чтобы указать ячейку этой сетки для его размещения. Эти дополнительные детали как раз и устанавливаются с использованием прикрепленных свойств.
Прикрепленные свойства всегда используют имя из двух частей в форме ОпределяемыйТип.ИмяСвойства. Этот синтаксис позволяет анализатору XAML различать обычное и прикрепленное свойство. В примере с автоответчиком прикрепленные свойства позволяют индивидуальным элементам управления размещать себя в разных строках (невидимой) сетки.
<TextBox... Grid.Row ="0">
[Place question here.]
</TextBox>
<Button... Grid.Row="l">
Ask the Eight Ball
</Button>
<TextBox... Grid.Row="2">
[Answer will appear here.]
</TextBox>
Следует отметить тот факт, что в действительности прикрепленные свойства вообще свойствами не являются. На самом деле они транслируются в вызовы методов. Анализатор XAML вызывает статический метод, имеющий форму ОпределяемыйТип.SetИмяСвойства (). Например, в предыдущем фрагменте XAML определяемым типом является класс Grid, а свойство - Row, поэтому анализатор вызывает Grid.SetRow ().
При вызове метода SetИмяСвойства () анализатор принимает два параметра: модифицируемый объект и значение свойства. Например, когда устанавливается свойство строки (Grid.Row) на элементе управления TextBox, то анализатор XAML выполняет следующий код:
Grid.SetRow(txtQuestion, 0);
Этот шаблон (с вызовом статического метода определенного типа) удобен тем, что скрывает то, что происходит на самом деле. На первый взгляд этот код выглядит так, будто номер строки сохраняется в объекте Grid. Однако номер строки в действительности сохраняется в объекте, которого он касается, в данном случае — в TextBox.
Эта манипуляция удается потому, что TextBox наследуется от базового класса DependencyObject, как и все элементы управления WPF. А этот класс предназначен для хранения практически неограниченной коллекции свойств зависимости. Следует отметить, что прикрепленные свойства как раз и являются специальным тип свойства зависимости.
Фактически метод Grid.SetRow () на самом деле представляет собой некоторую сокращенную форму его представления, эквивалентную вызову метода DependencyObject.SetValue ():
txtQuestion.SetValue(Grid.RowProperty, 0);
Прикрепленные свойства являются одной из основных составляющих WPR Они действуют как система расширения общего назначения. Например, определяя свойство Row как прикрепленное, вы гарантируете его применимость с любым элементом управления.
На заметку! Прикрепленные свойства очень похожи на поставщики расширений в приложении Windows Forms. И те, и другие позволяют вам добавлять "виртуальные" свойства для расширения другого класса. Отличие состоит в том, что, перед тем, как использовать его, необходимо создавать экземпляр поставщика расширений и значение расширенного свойства сохраняется в поставщике расширений, а не в расширяемом элементе управления. Дизайн прикрепленного свойства позволяет избежать проблем управления жизненным циклом (например, решая, когда следует уничтожать поставщика расширений).
Дата публикования: 2015-10-09; Прочитано: 540 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!