Практическое руководство. Определение и создание ссылки на ресурс
В этом примере описывается порядок определения ресурса и создания ссылки на него с помощью атрибута в Extensible Application Markup Language (XAML).
Пример
В следующем примере определяются ресурсы двух типов: ресурс SolidColorBrush, а также несколько ресурсов Style. Ресурс SolidColorBrushMyBrush используется для предоставления значений нескольких свойств, каждое из которых принимает значение типа Brush. Каждый из ресурсов класса Style (PageBackground, TitleText и Label) предназначен для определенного типа элемента управления. Стили используются для установки нескольких свойств для целевых элементов управления. Для этого создается ссылка ключа ресурса на ресурс стиля, который используется для установки свойства Style для нескольких конкретных элементов управления, определенных в XAML.
Обратите внимание, что одно из свойств метода установки стиля Label также ссылается на ресурс MyBrush, определенный ранее. Это стандартный способ. Однако следует учитывать, что анализ ресурсов и их добавление в словарь ресурсов осуществляется в том порядке, в котором они заданы. Если для ссылки на ресурсы из другого ресурса используется Расширение разметки StaticResource, их запрос также осуществляется в том порядке, в котором они найдены в словаре. Убедитесь, что любые ресурсы, на которые можно ссылаться, определены в коллекции ресурсов до их запроса. При необходимости можно обойти строгий порядок создания ссылок ресурсов. Для этого следует использовать Расширение разметки DynamicResource для ссылки на ресурс во время выполнения. Однако следует учитывать, что использование этого способа DynamicResource может привести к снижению производительности. Дополнительные сведения см. в разделе Общие сведения о ресурсах.
<Page Name="root"
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
<SolidColorBrush x:Key="MyBrush" Color="Gold"/>
<Style TargetType="Border" x:Key="PageBackground">
<Setter Property="Background" Value="Blue"/>
</Style>
<Style TargetType="TextBlock" x:Key="TitleText">
<Setter Property="Background" Value="Blue"/>
<Setter Property="DockPanel.Dock" Value="Top"/>
<Setter Property="FontSize" Value="18"/>
<Setter Property="Foreground" Value="#4E87D4"/>
<Setter Property="FontFamily" Value="Trebuchet MS"/>
<Setter Property="Margin" Value="0,40,10,10"/>
</Style>
<Style TargetType="TextBlock" x:Key="Label">
<Setter Property="DockPanel.Dock" Value="Right"/>
<Setter Property="FontSize" Value="8"/>
<Setter Property="Foreground" Value="{StaticResource MyBrush}"/>
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Margin" Value="0,3,10,0"/>
</Style>
</Page.Resources>
<StackPanel>
<Border Style="{StaticResource PageBackground}">
<DockPanel>
<TextBlock Style="{StaticResource TitleText}">Title</TextBlock>
<TextBlock Style="{StaticResource Label}">Label</TextBlock>
<TextBlock DockPanel.Dock="Top" HorizontalAlignment="Left" FontSize="36" Foreground="{StaticResource MyBrush}" Text="Text" Margin="20" />
<Button DockPanel.Dock="Top" HorizontalAlignment="Left" Height="30" Background="{StaticResource MyBrush}" Margin="40">Button</Button>
<Ellipse DockPanel.Dock="Top" HorizontalAlignment="Left" Width="100" Height="100" Fill="{StaticResource MyBrush}" Margin="40" />
</DockPanel>
</Border>
</StackPanel>
</Page>