Главная » Silverlight » Ресурсы XAML в Silverlight

0

В инфраструктуру Silverlight включена система ресурсов, плотно интегрированная с XAML. С помощью ресурсов можно решать следующие задачи.

•       Создание невизуальных объектов. Невизуальные объекты полезны, когда их используют другие элементы. Например, можно создать объект данных как ре­сурс, а затем применить связывание данных для вывода хранящейся в нем ин­формации в других элементах.

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

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

Не путайте систему ресурсов с ресурсами сборки, которые являются блоками данных, внедряемых в скомпилированную сборку Silverlight. Например, файл XAML, добавленный в проект, является внедренным ресурсом сборки. Ресурсы сборки рассма­триваются в главе 6.

Коллекция ресурсов

Каждый элемент обладает свойством Resources (Ресурсы), в котором хранится коллекция ресурсов. Коллекция ресурсов может содержать объекты любого типа, ин­дексированные строками.

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

Рассмотрим приложение EighBall. Объект кисти GradientBrush, рисующий фон объекта Grid, определяется и устанавливается в одном и том же месте. Однако кисть можно извлечь из разметки Grid и разместить в коллекции ресурсов.

<UserControl х:Class=”EightBall.Page” xmlns=”http://schemas.microsoft.com/winfx/2006/1^

xaml/presentation” xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”> <UserControl.Resources>

<LinearGradientBrush x:Key=”BackgroundBrush”> <LinearGradientBrush.GradientStops> <GradientStop Offset=”0.00″ Color=”Yellow” /> <GradientStop 0ffset=”0.50″ Color=”White” /> <GradientStop Offset=”l.00″ Color=”Purple” />

</LinearGradientBrush.GradientStops> </LinearGradientBrush> </UserControl.Resources>

</UserControl>

В этой разметке единственное важное новое для вас средство — атрибут Key, добав­ленный в кисть (префикс х используется для задания пространства имен XAML вместо Silverlight). Атрибут Key присваивает кисти имя, под которым она будет индексирована в коллекции ресурсов. Допустимо любое имя, нужно лишь, чтобы оно же использовалось и для извлечения ресурса. Рекомендуется присвоить ресурсу имя исходя из его назна­чения (которое не будет изменяться), а не способа его реализации (который может из­меняться). По этой причине имя BackgroundBrush (Кисть фона) лучше, чем Linear­GradientBrush (Кисть линейного градиента) или ThreeColorBrush (Трехцветная кисть).

Примечание. В разделе ресурсов можно создать экземпляр любого класса .NET (включая пользовательские классы). Нужно лишь, чтобы класс был “дружественным” к XAML. Это означает, что класс должен обладать несколькими базовыми средствами, такими как изменяемые свойства и конструктор без аргументов.

Чтобы использовать ресурс в разметке XAML, должен существовать способ ссыл­ки на него. Ссылка на ресурс реализуется с помощью расширения разметки (markup extension) — специального синтаксиса, предназначенного для установки свойств не­стандартным способом. Расширения разметки дополняют язык XAML и распознаются по фигурным скобкам. Ниже приведено расширение разметки StaticResource, позво­ляющее использовать ресурс в элементе Grid.

<Grid x:Name=”gridl”

Background=”{StaticResource BackgroundBrush}”>

Такой шаблон не сокращает разметку приложения EightBall, однако если необходи­мо применять одну и ту же кисть в разных элементах, то использование ресурса -— луч­ший способ избежать дублирования разметки. Даже если кисть задействуется только один раз, использование ресурса предпочтительнее, когда пользовательский интерфейс содержит много изменяемых графических элементов. Например, разместив все кисти в коллекции ресурсов, вы будете тратить меньше времени на их поиск и редактиро­вание. Некоторые разработчики применяют ресурсы практически во всех сложных объектах, создаваемых в разметке XAML для установки свойств.

Примечание. Слово static (Статический) отображает тот факт, что в WPF существует два типа ресурсов: статические и динамические. Однако в Silverlight поддерживаются только статические ресурсы.

Источник: Мак-Дональд, Мэтью. Silverlight 3 с примерами на С# для профессионалов. : Пер. с англ. —- М. : ООО «И.Д. Вильяме», 2010. — 656 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии