Ресурсы - это такие логические объекты (кисти, элементы управления, коллекции объектов и т.д.), которые мы можем определить в коде XAML или C#, а затем многократно использовать в различных частях программы. В данном случае речь идет именно о логических ресурсах - тех объектах, которые определяются в самой программе, а не о физических ресурсах - файлах изображений, аудио, видео и др.
Ресурсы повышают эффективность: мы можем определить один раз какой-либо ресурс и затем многократно использовать его в различных местах приложения. В связи с этим улучшается поддержка - если надо будет изменить ресурс, достаточно это сделать в одном месте, где он определен, и тогда изменения произойдут глобально во всем приложении.
Для определения ресурсов у большинства элементов в Universal Windows Platform имеется свойство Resources. Это свойство представляет объект ResourceDictionary - словарь ресурсов, в котором каждый ресурс имеет уникальный ключ.
Определим в приложении несколько ресурсов:
<Page x:Class="ResourceApp.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:ResourceApp" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Page.Resources> <SolidColorBrush x:Key="redStyle" Color="BlanchedAlmond" /> <LinearGradientBrush x:Key="gradientStyle" StartPoint="0.5,1" EndPoint="0.5,0"> <GradientStop Color="LightBlue" Offset="0" /> <GradientStop Color="White" Offset="1" /> </LinearGradientBrush> </Page.Resources> <Grid Background="{StaticResource redStyle}"> <Button x:Name="myButton" HorizontalAlignment="Center" Content="Ресурсы в UWP" Background="{StaticResource gradientStyle}"> <Button.Resources> <SolidColorBrush x:Key="darkStyle" Color="Gray" /> </Button.Resources> </Button> </Grid> </Page>
Здесь у объекта Page определяются два ресурса: redStyle - объект SolidColorBrush и gradientStyle - кисть с линейным градиентом. У кнопки определен один ресурс darkStyle, представляющий кисть SolidColorBrush. Причем каждый ресурс обязательно имеет свойство x:Key, которое определяет ключ в словаре и позволяет ссылаться на этот ресурс в других местах приложения.
А у свойства Background у грида и кнопки мы можем применить эти ресурсы: Background="{StaticResource gradientStyle}"
-
здесь после выражения StaticResource
идет ключ применяемого ресурса.
Добавим в словарь ресурсов окна градиентную кисть и установим ее для кнопки:
using Windows.UI; using Windows.UI.Xaml.Media; //............... // определение объекта-ресурса LinearGradientBrush gradientBrush = new LinearGradientBrush(); GradientStop stop1 = new GradientStop() { Color = Colors.LightGray, Offset = 0 }; GradientStop stop2 = new GradientStop() { Color = Colors.White, Offset = 1 }; gradientBrush.GradientStops.Add(stop1); gradientBrush.GradientStops.Add(stop2); // добавление ресурса в словарь ресурсов окна this.Resources.Add("buttonGradientBrush", gradientBrush); // установка ресурса у кнопки myButton.Background = (Brush)this.Resources["buttonGradientBrush"];
С помощью метода Add()
объект кисти и его произвольный ключ добавляются в словарь. Далее мы получаем этот ресурс в словаре и установить
его в качестве фона: (Brush) this.Resources["buttonGradientBrush"]
. Причем, так как этот метод возвращает object, необходимо выполнить
приведение типов.
У объекта ResourceDictionary можно выделить следующие методы и свойства:
Метод Add(string key, object resource) добавляет объект с ключом key в словарь, причем в словарь можно добавить любой объект, главное ему сопоставить ключ
Метод Remove(string key) удаляет из словаря ресурс с ключом key
Свойство Source устанавливает источник словаря
Свойство Keys возвращает все имеющиеся в словаре ключи
Свойство Values возвращает все имеющиеся в словаре объекты