Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
course_(Windows&Web).docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.68 Mб
Скачать

Повторное использование настроек цвета

Как вы уже знаете, гибкий шаблон Control’а можно настраивать через свойства Control’а, значение которых можно задавать в стиле. Однако Silverlight приложения редко изменяют свойства только одного Control’а за раз. Как правило, для изменения вида приложения изменяются настройки сразу у множества шаблонов. В таких ситуациях нужно уметь синхронно использовать определенные свойства Control’ов (например, настройки цвета). Для этого все «вшитые» значения вынесите из стилей и шаблонов, описав их как отдельные ресурсы. Например:

<SolidColorBrush x:Key="BackgroundBrush" Color="Red"/>

Затем вы можете обращаться к этим ресурсам из стилей и шаблонов:

<Style x:Key="ButtonStyle" TargetType="Button"> <Setter Property="Foreground" Value="White"/> <Setter Property="Background" Value="{StaticResource BackgroundBrush}"/> <Setter Property="Template" Value="{StaticResource ButtonTemplate}"/> </Style>

Простое добавление ресурса с определенным именем позволит вам использовать один и тот же шаблон, но различные цвета бордюра. Однако имеется и слабая сторона такого подхода, т.к. это несколько усложняет ваш проект.

Для большей гибкости вы можете вынести в отдельный ресурс даже настройки цветов, а затем использовать их как ресурсы кисти:

<Color x:Key="BackgroundColor">#FF800000</Color> <SolidColorBrush x:Key="BackgroundBrush" Color="{StaticResource BackgroundColor}"/>

Такой принцип позволяет повторно использовать цветовую схему для самых разных случаев (например, для заливки и для градиентной кисти) без необходимости дублировать информацию о цвете в вашей разметке. При правильном использовании такой модели вы сможете изменять цветовую схему всего приложения, манипулируя всего лишь одним набором ресурсов.

Замечание: при объявлении цвета как отдельного ресурса ему может быть задан цвет в виде имени цвета или в виде шестнадцатеричного HTML-кода цвета (как в примере). Но, к сожалению, нельзя объявить цвет в XAML, используя набор красного, зеленого, и синего составляющих цвета.

Ключевые термины

Styles: совокупность значений свойств, которые можно все сразу применить к нужному элементу.

Templates: каждый Control содержит встроенный набор правил, определяющий его отрисовку (в виде набора более простых элементов). Этот набор правил называется шаблоном Control’а (control template). Описывается он как блок XAML-разметки и применяется к Control’у через свойство «Template».

Краткие итоги

В этой лекции мы рассмотрели механизм применения некоторого набора свойств к одному или нескольким элементам управления - стили. С помощью стилей можно создавать однородные темы и применять их к разным приложениям. Однако у стилей имеются ограничения на изменение свойств описанных в классе элемента. В Silverlight имеется куда более радикальный инструмент для настройки подобных вещей, называемый шаблонами (templates). Тогда как стили можно применять к любому Silverlight элементу, использование шаблонов ограничено Silverlight Control’ами, т.е. элементами которые наследуются от класса Control принадлежащего пространству имен System.Windows.Controls. Более детально эти отличия мы рассмотри в следующей лекции.

Набор для практики

Вопросы:

  1. Приведите пример необходимости использования класса ContentPresenter.

  2. Назначение ресурсов в WPF. Пример использования?

  3. Назначение стилей в WPF. Пример использования?

  4. Назначение шаблонов в WPF. Пример использования?

  5. Поясните назначение установки шаблонов через стили.

Тесты

Задача 1.

Вариант 1 Задачи 1.

В ситуации, когда один и тот же стиль описан на нескольких уровнях сразу, тогда процесс поиска стиля начнется

+ Ответ 1. в ресурсах текущего элемента

Ответ 2. в контейнере содержащем этот элемент

Ответ 3. в ресурсах приложения (в файле App.xaml)

Ответ 4. недопустимо задавать один и тот же стиль в разных местах приложения

Вариант 2 Задачи 1.

Если вы хотите, чтобы стиль был доступен в любой части кода вашего приложения его необходимо располагать

Ответ 1. в ресурсах каждого элемента

Ответ 2. в ресурсах каждой страницы

+ Ответ 3. в ресурсах приложения (в файле App.xaml)

Ответ 4. данная возможность будет доступна в следующих версиях

Вариант 3 Задачи 1.

Если необходимо, чтобы стиль был доступен в любой части кода вашего приложения, его необходимо описать в файле приложения …

Ответ 1. App.xaml

Задача 2.

Вариант 1 Задачи 2.

Перекрыть стандартное визуальное представление Control’а можно через:

Ответ 1. стиль Control’а

+ Ответ 2. свойство Template

Ответ 3. как через стиль Control’а, так и через свойство Template

Ответ 4. перекрыть стандартное визуальное представление невозможно

Вариант 2 Задачи 2.

Применять шаблоны можно:

Ответ 1. к любому Silverlight/WPF элементу

+ Ответ 2. ко всем элементам которые наследуются от класса Control

Ответ 3. ко всем элементам которые наследуются от класса FrameworkElement

Ответ 4. к любому WPF элементу

Вариант 3 Задачи 2.

Перекрыть стандартное визуальное представление Control’а можно через свойство …

Ответ 1. Template

Задача 3.

Вариант 1 Задачи 3.

Сеттеры свойств могут влиять:

+ Ответ 1. на любые зависимые свойства

Ответ 2.только на те, что управляют поведением объекта

Ответ 3. только на те, что управляют его внешним видом

Ответ 4. на любые свойства

Вариант 2 Задачи 3.

Сеттеры свойств могут влиять:

Ответ 1. на не зависимые свойства

+ Ответ 2. на зависимые свойства, что управляют поведением объекта

+ Ответ 3. на зависимые свойства, что управляют его внешним видом

Ответ 4. на не зависимые свойства, что управляют его внешним видом

Вариант 3 Задачи 3.

Назовите поле, которое должно быть задано для любого стиля, определяющее тип элементов, к которым может применяться данный стиль

Ответ 1. TargetType

Задача 4.

Вариант 1 Задачи 4.

Вы используете стиль «SomeStyle» определяющий значение FontSize, а также явно устанавливаете другое значение свойству FontSize элемента, к которому применен стиль «SomeStyle». Какое значение будет иметь свойства FontSize у элемента?

Ответ 1. то, что определено в стиле

+ Ответ 2. то, что определено в элементе

Ответ 3. зависит от элемента управления

Ответ 4. данный прием вызовет ошибку компиляции

Вариант 2 Задачи 4.

Допустимо задавать стиль программно?

Ответ 1. допустимо без всяких на то ограничений

Ответ 2. недопустимо

+ Ответ 3. допустимо только один раз

Ответ 4. данная функциональность будет доступна в следующих версиях

Вариант 3 Задачи 4.

Расширение разметки, предоставляющее значение свойству Style элемента путем поиска ссылки на уже определенный стиль.

Ответ 1. StaticResource

Задача 5.

Вариант 1 Задачи 5.

Приведите в соответствие определение свойств класса Style:

1. Resources – 3 указывает, к элементам каких типов может применяться стиль. Таким типом может быть, например, TreeView или Button

2. Setters – 1 Dictionary, в котором вы можете описывать объекты, которые будут использоваться только в рамках стиля. Это могут быть кисти, value-конверторы и т.п.

3. TargetType – 2 набор объектов, которые устанавливают значения для свойств или назначают обработчики событий.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]