Главная » C#, Windows Runtime, XAML, Разработка для Windows 8 » Ресурсы XAML

0

Выше  мы  говорили о  возможности создания  стилей.  Которые,  как  было отмечено, не должны входить в дерево XAML-элементов. Все стили мы записывали  внутри свойства Resources, принадлежащего объекту Page. Подобное свойство есть  у  всех объектов  XAML,  порожденных  от  FrameworkElement,  а  также у объекта  приложения  (Application). Благодаря ресурсам разработчик может сохранять стили и другие части XAML-кода до востребования. Так, в  ресурсы можно  выделять объекты  некоторых  типов, стили,  шаблоны  данных  и  др. Фактически, свойство  Resources ссылается на некий  словарь, который может быть доступен как из кода, так и из XAML.

Если  мы  используем  ресурсы  на  уровне приложения,  то  доступ  к  ресурсу может быть осуществлён лишь по ключу, вне  зависимости от  того, в   каком из  родительских  элементов  объявлен ресурс. Если  же  ресурс был объявлен в одном из дочерних элементов, то он не может использоваться родительскими элементами.

Рассмотрим небольшой пример.

<Page.Resources>

<LinearGradientBrush x:Key="myBrush">

<GradientStop Color="Red" Offset="0"></GradientStop>

<GradientStop Color="Green" Offset="1"></GradientStop>

</LinearGradientBrush>

</Page.Resources>

<StackPanel>

<Button Width="100" Height="50" Background="{StaticResource myBrush}" Content="Button 1" Margin="5">

</Button>

</StackPanel>

Мы определили в роли ресурса градиентную кисть, указав в качестве ключа (он же является именем) myBrush. Данный ключ будет использоваться для доступа к ресурсу. Как Вы могли заметить, доступ  к  ресурсу определяется с помощью расширения  разметки   StaticResource.  Тут  достаточно  указать  имя  ключа в качестве параметра.

В примере выше мы разместили ресурсы внутрь элемента Page, который является контейнером  для  всего нашего  интерфейса.  Это   обеспечивает видимость ресурсов для любого дочернего элемента.  Если мы хотим ограничить область

видимости, то ресурсы можно разместить в   любом из дочерних  элементов,

например в StackPanel.

<StackPanel>

<StackPanel.Resources>

<LinearGradientBrush x:Key="myBrush">

<GradientStop Color="Red" Offset="0"></GradientStop>

<GradientStop Color="Green" Offset="1"></GradientStop>

</LinearGradientBrush>

</StackPanel.Resources>

<Button Width="100" Height="50" Background="{StaticResource myBrush}" Content="Button 1" Margin="5">

</Button>

</StackPanel>

Таким образом, для конечного элемента управления нет никакой разницы, где находятся ресурсы. Главное, чтобы они были в  области  видимости элемента, а доступ к ним осуществляется по одинаковой схеме.

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

Вот пример определения этих же ресурсов внутри файла приложения.

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:Application4">

<Application.Resources>

<LinearGradientBrush x:Key="myBrush">

<GradientStop Color="Red" Offset="0"></GradientStop>

<GradientStop Color="Green" Offset="1"></GradientStop>

</LinearGradientBrush>

</Application.Resources>

</Application>

Сергей Лутай, Сергей Байдачный, Windows 8 для C# разработчиков

По теме:

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