Ресурсы объектов

82

Давайте рассмотрим назначение ресурсов объектов. Когда в среде Expression Blend формируются такие визуальные ресурсы, как специальные кисти, стили, шаблоны элементов управления и так далее, невольно возникает ситуация, в которой требуется еще раз воспользоваться отдельным ресурсом подобного рода. Допустим, вы создали идеальную кисть для раскраски градиента, на что вам потребовалось немало времени.

Было бы очень неприятно воссоздавать те же самые действия в редакторе кистей для повторного формирования разметки XAML, описывающей данную кисть. Еще более неприятная ситуация может возникнуть в том случае, если вам снова потребуется кисть, созданная несколько недель назад, а вы, естественно, не помните точно все свои действия в редакторе кистей чтобы воссоздать эту кисть. Конечно, вы могли бы скопировать и вставить соответствующую разметку из одного проекта в другой, но это было бы в лучшем случае обременительно.

К счастью, на обеих платформах, WPF и Silverlight, поддерживается принцип ресурса объекта, называемого просто ресурсом. По существу, ресурс представляет собой именованный большой двоичный объект XAML, хранящийся в текущем проекте. Так, если требуется обратиться к такому объекту из элементов управления пользовательского интерфейса, его можно выбрать по присвоенному ему имени. В Expression Blend имеется целый ряд инструментов для определения, манипулирования и неоднократного использования ресурсов.

На рассматриваемом далее примере манипулирования объектом специальной кисти будет показано, как пользоваться ресурсами кистей, а другие виды ресурсов (стилей, шаблонов и пр.) будут рассмотрены позже. Правда, независимо от типа ресурса процесс разработки приложений в Expression Blend остается неизменным.

Создание ресурсов в Expression Blend

Ради соблюдения принципа модульности в максимальной степени создайте новый проект приложения WPF, присвоив ему имя BlendResources, хотя в качестве отправной точки можете воспользоваться любым проектом, над которым работали ранее. Затем нарисуйте произвольную геометрическую форму на монтажном столе инструментом Pencil и задайте в ее свойстве Fill специальную, сложную кисть для заполнения этой формы градиентом.

По завершении обратите внимание на пиктограмму квадратика справа от свойства Fill (или другого свойства раскраски кистью) в редакторе кистей. Как упоминалось ранее, этой пиктограммой обозначается кнопка выбора дополнительных параметров настройки. Щелкнув па этой кнопке, вы увидите меню с выбранной командой Convert to New Resource (Преобразовать в новый ресурс):

Извлечение ресурса кисти

Как только вы выберете упомянутую выше команду, откроется диалоговое окно, в котором вам будет предложено ввести ряд важных данных. Прежде всего вам нужно присвоить подходящее имя ресурсу объекта для созданной кисти. Затем следует указать место для хранения ресурса. И для этого в вашем распоряжений имеются три варианта выбора:

Приложение

Ресурсы перемещаются в файл App.xaml текущего проекта. Благодаря этому ресурсы могут быть использованы в любой части проекта на платформе WPF или Silverlight

Текущий документ

Ресурс может быть повторно использован только в объекте типа Window или UserControl текущего проекта WPF или Silverlight соответственно. Это удобно в том случае, если разрабатывается сложная система компоновки пользовательского интерфейса приложения с использованием вложенных диспетчеров компоновки и требуется, чтобы заданный ресурс объекта использовался во всех подчиненных компонентах

Словарь ресурсов

В этом случае можно создать новый XAML-документ, называемый словарем ресурсов и содержащий только ресурсы объектов. Такой вариант отлично подходит для создания ресурсов, применяемых в разных проектах, поскольку словарь ресурсов можно добавить в виде XAML-документа в новый проект, разрабатываемый в среде Expression Blend

Создание нового словаря ресурсов в Expression Blend

В данном примере ресурс myBrush будет помещен в словарь ресурсов, находящийся в файле MyResources.xaml. Щелкните на кнопке New, чтобы создать этот файл.

В итоге вы обнаружите, что вновь созданный XAML-файл добавлен в текущий проект, а файл разметки приложения App.xaml видоизменен с целью объединения с внешним файлом ресурсов. Проверьте и то и другое на панели Projects. А если вы проверите разметку формы, использованной для хранения специально созданной кисти, то увидите, что в расширении разметки, сформированном в коде XAML, делается ссылка на данный ресурс по имени, как показано ниже:

<Path ... Fill="{StaticResource myBrush}"/>

Управление имеющимися ресурсами

Как только ресурс будет извлечен, можете видоизменить его впоследствии несколькими способами. В данном примере ресурсом оказывается специально созданная кисть, поэтому можете выбрать последнюю вкладку Brush Resources в редакторе кистей, чтобы получить доступ ко всем ресурсам объектов кистей в своем проекте. Если же вы щелкнете на пиктограмме любого ресурса, то тем самым откроете соответствующий редактор кисти, чтобы изменить ресурс по ходу разработки:

Еще один способ просмотра и видоизменения ресурсов в приложении состоит в использовании панели Resources, расположенной с правой стороны рабочего окна Expression Blend рядом с панелью Properties. Эта панель удобна тем, что каждый ресурс можно просмотреть на ней не только но имени, но и но месту его хранения (в объекте типа Window, и словаре ресурсов и т.д.). И в этом случае нужный ресурс можно выбрать для последующей правки.

И последнее и самое главное, что можно сделать с ресурсами объектов - использовать их повторно при создании пользовательского интерфейса приложения. Для этого достаточно выбрать нужный ресурс по имени в соответствующем редакторе. В рассматриваемом здесь примере используется ресурс специально созданной кисти myBrush, поэтому можете выбрать его из редактора кистей при установке свойств раскраски кистью.

Если вы добавите элемент пользовательского интерфейса на монтажном столе, например элемент управления Button, то можете перейти на вкладку Brush Resources в редакторе кистей, где и находится данный ресурс.

Пройди тесты
Лучший чат для C# программистов