如何:使用应用程序范围的资源字典
本示例显示如何定义和使用应用程序范围的自定义资源字典。
示例
Application 公开共享资源的应用程序范围的存储:Resources。 默认情况下,使用 ResourceDictionary 类型的实例初始化 Resources 属性。 使用 Resources 获取和设置应用程序范围属性时可以使用此实例。 有关详细信息,请参阅如何:获取和设置应用程序范围的资源。
如有使用 Resources 设置的多个资源,则可以使用自定义资源字典来储存那些资源并使用它来设置 Resources。 以下内容显示如何使用 XAML 声明自定义资源字典。
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
<SolidColorBrush x:Key="StandardSolidColorBrush" Color="Blue" />
<LinearGradientBrush x:Key="StandardLinearGradientBrush" StartPoint="0.0,0.0" EndPoint="1.0,1.0">
<LinearGradientBrush.GradientStops>
<GradientStop Color="White" Offset="0" />
<GradientStop Color="Black" Offset="1" />
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</ResourceDictionary>
通过使用 Resources 交换整个资源字典,可支持应用程序范围的主题,其中每个主题封装在单个资源字典中。 下面的示例演示如何设置 ResourceDictionary。
<!--Set the Application ResourceDictionary-->
<Application.Resources>
<ResourceDictionary Source="MyResourceDictionary.xaml" />
</Application.Resources>
以下内容显示如何从 XAML 中的 Resources 所公开的资源字典获取应用程序范围资源。
<!--Set the brush as a StaticResource from the ResourceDictionary-->
<Rectangle Name="Rect" Height="200" Width="100" Fill="{StaticResource ResourceKey=StandardSolidColorBrush}" />
以下内容显示如何也能获取代码中的资源。
//Get a resource from the ResourceDictionary in code
Brush gradientBrush = (Brush)Application.Current.FindResource("StandardLinearGradientBrush");
'Get a resource from the ResourceDictionary in code
Dim GradientBrush As Brush = Application.Current.FindResource("StandardLinearGradientBrush")
使用 Resources 时有两个注意事项。 首先,字典“键”是一个对象,因此设置和获取属性值时都必须使用完全相同的对象实例。 (请注意,使用字符串时键区分大小写。)其次,字典“值”是一个对象,因此获取属性值时必须将值转换为所需类型。
某些资源类型可能会自动使用该类型定义的属性作为显式键,例如 Style 和 DataTemplate 类型。 这可能会替代你的 x:Key
值。 若要保证遵守 x:Key
密钥,请在显式密钥属性之前声明它。 有关详细信息,请参阅样式、DataTemplate 和隐式键。