如何:定义和引用资源
本示例演示如何使用Extensible Application Markup Language (XAML) 中的一个特性来定义和引用资源。
示例
下面的示例定义两种类型的资源:一个 SolidColorBrush 资源和多个 Style 资源。 SolidColorBrush 资源 MyBrush 用于提供多个属性的值,其中每个属性都有一个 Brush 类型值。 Style 资源 PageBackground、TitleText 和 Label 均针对一种特定的控件类型。 当该样式资源由资源键引用并用于设置 XAML 中定义的多个特定控件元素的 Style 属性时,这些样式即设置目标控件的多个不同属性。
请注意,Label 样式的 setter 中的某个属性还引用前面定义的 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>