Здесь под ресурсами подразумеваются не дополнительные файлы, как, например, аудиофайлы, файлы с изображениями, которые добавляются в проект. Silverlight. Это свойство включает коллекцию, точнее словарь (Resource dictionary) отдельных ресурсов. Каждый ресурс является каким-нибудь объектом, например, элемент управления, кисть, коллекция объектов и т.д. Смысл использования ресурсов в их гибкости, их можно многократно использовать в различных частях приложения, динамически менять. Кроме того, некоторые объекты, например, коллеции пользовательских типов невозможно в xaml-коде объявить иначе, как с помощью ресурсов.
Поскольку ресурсы содержатся в словаре, каждому присваивается уникальный ключ с помощью свойства x:Key. По этому ключу можно потом в коде найти ресурс.
Например, объявим кнопку в качестве ресурса и затем используем ее в проекте
<UserControl x:Class="TestApplication.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignHeight="200" d:DesignWidth="250"> <UserControl.Resources> <RadialGradientBrush x:Key="R2D2Button"> <GradientStopCollection> <GradientStop Color="Red" Offset="0.8" /> <GradientStop Color="Black" Offset="1" /> </GradientStopCollection> </RadialGradientBrush> </UserControl.Resources> <Grid x:Name="LayoutRoot"> <Button Height="40" Width="100" VerticalAlignment="Center" Content="Hello World" Background="{StaticResource R2D2Button}" /> </Grid> </UserControl>
В данном случае мы создаем ресурс с ключом x:Key="R2D2Button"
и затем присваиваем этот ресурс свойству Background кнопки в проекте.
Ресурсы могут объявляться внутри различных элементов управления - UserControl, Grid, Button. Также возможно определение ресурсов для все приложения в файле xaml-разметки приложения.
Общий синтаксис задания ресурса в качестве значения свойства объекта такой: в фигурных скобках после ключевого слова StaticResource или DynamicResource идет ключ ресурса:
Свойство="{StaticResource ключ_ресурса}"
Мы можем получить объект ресурса, обратившись к коллекции ресурсов и получив из нее по ключу нужный объект:
RadialGradientBrush rdb = (RadialGradientBrush)this.Resources["R2D2Button"];
В то же время мы не можем изменить ресурс или присвоить ему новый объект, так как, в отличие от WPF, Silverlight не поддерживает динамические ресурсы.
Кроме прописывания ресурсов на уровне определенного элемента, например, UserControl или Grid, можно воспользоваться словарем ресурсов. Для этого надо добавить в проект новый объект под названием Resource Dictionary. Он представляет собой обычный xaml-файл.
Нажмите правой кнопкой на название проекта и выберите в пункт Add->New Item.... Затем среди шаблонов выберите Silverlight Resource Dictionary. Выберите имя Dictionary1.xaml и нажмите OK. В проект будет добавлен словарь ресурсов. Теперь вынесем ресурс кисти с радиальным градиентом из ресурсов UserControl в наш словарь ресурсов:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <RadialGradientBrush x:Key="R2D2Button"> <GradientStopCollection> <GradientStop Color="Red" Offset="0.8" /> <GradientStop Color="Black" Offset="1" /> </GradientStopCollection> </RadialGradientBrush> </ResourceDictionary>
Если наш словарь находится в файле Dictionary1.xaml
, то его можно подключить в файле разметки приложения таким способом:
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="TestApplication.App"> <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="Dictionary1.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> </Application>
Запустите проект и вы увидите, что несмотря на то, что мы удалили ресурсы UserControl из разметки, кнопка все равно применяет ресурс, но теперь уже из словаря ресурсов.