方法: アプリケーション スコープのリソース ディクショナリを使用する

この例では、アプリケーション スコープのカスタム リソース ディクショナリを定義して、使用する方法を示します。

Application では、共有リソース用にアプリケーション スコープのストア Resources が公開されています。 既定では、Resources プロパティは ResourceDictionary 型のインスタンスで初期化されます。 このインスタンスは、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 を使用するときに注意する点が 2 つあります。 1 つ目は、ディクショナリの "キー" はオブジェクトであるため、プロパティ値を設定および取得するときに、まったく同じオブジェクト インスタンスを使用する必要があります。 (キーに文字列を使用する場合、大文字と小文字が区別されることに注意してください)。2 つ目は、ディクショナリの "" はオブジェクトであるため、プロパティ値を取得するときに、その値を目的の型に変換する必要があります。

一部のリソースの種類では、Style 型や DataTemplate 型など、明示的なキーとしての型によって定義されたプロパティが自動的に使用される場合があります。 これにより、x:Key 値が上書きされる可能性があります。 x:Key キーが尊重されることを保証するには、明示的なキー プロパティよりも前に宣言します。 詳細については、「スタイル、DataTemplates、暗黙的なキー」を参照してください。

関連項目