Ресурсы

Концепция ресурсов в Universal Windows Platform

Последнее обновление: 11.02.2016

Ресурсы - это такие логические объекты (кисти, элементы управления, коллекции объектов и т.д.), которые мы можем определить в коде 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 идет ключ применяемого ресурса.

Ресурсы в Universal Windows Platform

Управление ресурсами в коде C#

Добавим в словарь ресурсов окна градиентную кисть и установим ее для кнопки:

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 возвращает все имеющиеся в словаре объекты

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850