Windows Presentation Foundation (WPF). Урок 3. Свойства объектов XAML. |
Автор megabax | |||||||
07.02.2013 г. | |||||||
Windows Presentation Foundation (WPF). Урок 3. Свойства объектов XAML.Поместив на форму WPF приложения кнопочку: Мы видим, что у нее есть например, такие свойства, как HorizontalAlignment, в XAML они задаются строкой, но в .NET свойство HorizontalAlignment элемента Button вовсе не строка, это enum. Иными словами, анализатору XAML приходиться конвертировать типы свойств. При этом он выполняет следующие действия:
Однако конверторы свойств подходят не для всех сценариев. В частности, некоторые свойства являются полноценными объектами с собственными наборами свойств. Можно, конечно, создать строковое представление объектов, но это неудобно и повышает вероятность ошибки. К счастью есть синтаксис "Свойство.Элемент". Суть этого синтаксиса состоит в том, что у свойств можно задавать отдельные элементы "через точку". Например для того что бы задать свойство Background у элемента Grid можно использовать Grid.Background, вот пример синтаксиса задания этого свойства:
Вот к какому эффекту приведет данный синтаксис: Это же самое можно сделать и программно. Но мы напишем программный код для другой заливки и поместим его в обработчик нажатия кнопочки "Кнопка":
Задам имя объекта Grid: и запустим программу на тестирование. Сначала у нас окно имеет вот такой вид: а при нажатии на кнопочку уже вот такой: Бывают случаи, когда невозможно жестко закодировать значение свойства. Например, когда значение свойства должно быть установлено в уже существующий объект или значение свойства надо установить динамически, например, привязав его к свойству в другом элементе управления. В таких случаях используется специальный синтаксис, называемый расширение разметки. Вот так вот например, можно ссылаться на статическое свойство другого класса (синтаксис выделен серым):
В данном случае мы цвет текста на кнопке задаем как значение SystemColors.ActiveCaptionBrush. Вот к какому эффекту это приведет: Данный синтаксис эквивалентен следующему коду:
За разбор расширенной разметки отвечает класс StaticExtension. Префикс x в синтаксисе указывает на то, что этот класс находиться в одном из пространств имен XAML. Все расширения разметки реализованы классами, ддочерними от System.Windows.Markup.MarkupExtension. Этот класс содержит всего один метод ProvideValue. Напоследок я расскажу о таком понятии, как присоединенные свойства. Это такие свойства, которые применяются к нескольким элементам управления, но определны в другом классе. В WPF такие свойства часто используются для управления компоновкой. Что бы было более понятно, продемонстрирую это на примере. и так, давайте у объекта Grid сделаем пару строчек и пару столбцов (свойства ColumnDefinitions и RowDefinitions): Для этого просто жмем на кнопочку с тремя точками, что бы вызвать окно редактирования коллекции: У нас появиться сетка, куда мы можем поместить элементы управления: У этих элементов управления как раз так и появиться присоединенное свойство, которое указывает на ячейку сетки, в которую помещен данный элемент управления: Эти свойства именно поэтому называются присоединенными, потому что они появляются у компонента только лишь при определенных условиях, например, когда его помещают в контейнер. Нетрудно догадаться, для чего нужны такие свойства - дело в том, что в разных ситуациях нужны совершенно разные дополнительные свойства и нет нужны нагружать компонент целым рядом редко используемых свойств. Так же эти свойства видны в диспетчере свойств: Установку дополнительных свойств можно делать и программно, например, так:
Вот у нас кнопочка button1: А вот button2: нажимаем на button1, и button2 у нас смещается в другую ячейку сетки: Тот же самый эффект мы получим если запишем код в таком виде:
На этом урок окончен, до новых встреч.
|
|||||||
Последнее обновление ( 07.02.2013 г. ) |