Ресурсы позволяют определить объекты, которые могут многократно использоваться в приложении в различных его частях. Итак, определим пару ресурсов и используем их:
<Page x:Class="HelloApp.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:HelloApp" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Page.Resources> <SolidColorBrush x:Key="darkRedBrush" Color="DarkRed" /> <SolidColorBrush x:Key="grayBrush" Color="DarkGray" /> </Page.Resources> <Grid> <Button x:Name="button1" Background="{StaticResource grayBrush}" Foreground="{StaticResource darkRedBrush}" Content="Кнопка" VerticalAlignment="Top" /> </Grid> </Page>
Получится такая кнопка:
Ресурсы определяются в свойстве Resources, которое есть у компонентов визуального интерфейса. В данном случае ресурсы определены
как ресурсы элемента Page внутри тегов <Page.Resources> </Page.Resources>
.
Каждый ресурс должен иметь уникальный идентификатор, которым выступает свойство x:Key.
Чтобы задать ресурс в качестве значения свойство, используется выражение {StaticResource ключ_ресурса}
В качестве ресурсов можно определить и более сложное содержимое, например:
<Page x:Class="HelloApp.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:HelloApp" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Page.Resources> <SolidColorBrush x:Key="darkRedBrush" Color="DarkRed" /> <SolidColorBrush x:Key="grayBrush" Color="DarkGray" /> <StackPanel x:Key="R2D2Button" Orientation="Horizontal"> <Ellipse Fill="Red" Width="30" Height="30" Stroke="Black" /> <TextBlock Text="Record" FontSize="22" Width="100" Height="30" Margin="8" /> </StackPanel> </Page.Resources> <Grid> <Button Background="{StaticResource grayBrush}" VerticalAlignment="Top" Foreground="{StaticResource darkRedBrush}" Content="{StaticResource R2D2Button}" /> </Grid> </Page>
Если у нас в проекте несколько страниц Page, и нам надо использовать одинаковые ресурсы на каждой из них, то мы можем определить данные ресурсы в качестве ресурсов всего приложении. Для этого откроем файл App.xaml и добавим в него определение ресурсов:
<Application x:Class="HelloApp.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:HelloApp"> <Application.Resources> <SolidColorBrush x:Key="darkRedBrush" Color="DarkRed" /> <SolidColorBrush x:Key="grayBrush" Color="DarkGray" /> <StackPanel x:Key="R2D2Button" Orientation="Horizontal"> <Ellipse Fill="Red" Width="30" Height="30" Stroke="Black" /> <TextBlock Text="Record" FontSize="22" Width="100" Height="30" Margin="8" /> </StackPanel> </Application.Resources> </Application>
В этом случае данные ресурсы будут доступны из любого места приложения.
Кроме подключения ресурсов через StaticResource в разметке по умолчанию можно увидеть в определении Page такое выражение
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
. ThemeResource позволяет подключить ранее созданную тему для
приложения. Подобных тем существует довольно много для разных типов элементов: