次の方法で共有


方法: 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 を使用してリソース ディクショナリ全体をスワップすると、アプリケーション スコープのテーマをサポートできます。各テーマは 1 つのリソース ディクショナリによってカプセル化されます。 次の例は、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 つの考慮事項を考慮する必要があります。 最初に、 キー ディクショナリはオブジェクトであるため、プロパティ値の設定と取得の両方でまったく同じオブジェクト インスタンスを使用する必要があります。 (文字列を使用する場合、キーでは大文字と小文字が区別されることに注意してください)。次に、ディクショナリ はオブジェクトであるため、プロパティ値を取得するときに値を目的の型に変換する必要があります。

一部のリソースの種類では、StyleDataTemplate 型など、型によって定義されたプロパティが明示的なキーとして自動的に使用される場合があります。 これにより、x:Key 値がオーバーライドされる可能性があります。 x:Key キーが尊重されることを保証するには、明示的なキー プロパティの前に宣言します。 詳細については「スタイル、データテンプレート、および暗黙のキー」をご参照ください。

関連項目