Поделиться через


Как использовать словарь ресурсов Application-Scope

В этом примере показано, как определить и использовать настраиваемый словарь ресурсов области приложения.

Пример

Application предоставляет хранилище областей приложения для общих ресурсов: Resources. По умолчанию свойство Resources инициализируется экземпляром типа ResourceDictionary. Этот экземпляр используется при получении и настройке свойств области приложения с помощью Resources. Для получения дополнительной информации см. раздел Как: Получить и настроить Application-Scope ресурс.

Если у вас есть несколько ресурсов, настроенных с помощью 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>

Ниже показано, как получить ресурсы области приложения из словаря ресурсов, предоставляемых Resources в XAML.

<!--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, объявите его перед явным свойством ключа. Дополнительные сведения см. в разделе Стили, DataTemplates и неявные ключи.

См. также