次の方法で共有


{StaticResource} マークアップ拡張

既に定義されているリソースへの参照を評価することによって、任意の XAML 属性の値を提供します。 リソースは ResourceDictionary で定義され、 StaticResource 使用状況は ResourceDictionary 内のそのリソースのキーを参照します。

XAML 属性の使用方法

<object property="{StaticResource key}" .../>

XAML 値

項目 説明
キー 要求されたリソースのキー。 このキーは、最初に ResourceDictionary によって割り当てられます。 リソース キーは、XamlName 文法で定義されている任意の文字列の可能性があります。

解説

StaticResource は、XAML リソース ディクショナリ内の他の場所で定義されている XAML 属性の値を取得するための手法です。 値は、複数のプロパティ値によって共有されることを意図しているか、XAML リソース ディクショナリが XAML パッケージ化または要素化の手法として使用されるため、リソース ディクショナリに配置される場合があります。 XAML パッケージ化手法の例として、コントロールのテーマ ディクショナリがあります。 もう 1 つの例として、リソース フォールバックに使用されるマージ されたリソース ディクショナリがあります。

StaticResource は、要求されたリソースのキーを指定する 1 つの引数を受け取ります。 リソース キーは常に XAML の文字列Windows ランタイム。 リソース キーの最初の指定方法の詳細については、「 x:Key 属性」を参照してください。

StaticResourceがリソース ディクショナリ内の項目に解決する規則については、このトピックでは説明しません。 これは、参照とリソースの両方がテンプレートに存在するかどうか、マージされたリソース ディクショナリが使用されているかどうかなどによって異なります。 リソースを定義し、サンプル コードを含む ResourceDictionary を適切に使用する方法の詳細については、「 ResourceDictionary および XAML リソース参照を参照してください。

重要 StaticResource は、XAML ファイルの中で辞書的に定義されているリソースへの前方参照を行うことはできません。 この操作はサポートされていません。 前方参照が失敗しない場合でも、前方参照を作成しようとするとパフォーマンスが低下します。 最適な結果を得るには、前方参照が回避されるようにリソース ディクショナリの構成を調整します。

解決できないキーに StaticResource を指定しようとすると、実行時に XAML 解析例外がスローされます。 デザイン ツールでは、警告やエラーが表示される場合もあります。

Windows ランタイム XAML プロセッサの実装では、StaticResource 機能のバッキング クラス表現はありません。 StaticResource は XAML でのみ使用できます。 コードで最も近いのは、 ResourceDictionary のコレクション API を使用することです 。たとえば、 Contains または TryGetValue を呼び出します。

{ThemeResource} マークアップ拡張 は、別の場所にある名前付きリソースを参照する同様のマークアップ拡張機能です。 違いは、{ThemeResource} マークアップ拡張機能には、アクティブなシステム テーマに応じて異なるリソースを返す機能があるということです。 詳細については、 {ThemeResource} マークアップ拡張を参照してください。

StaticResource はマークアップ拡張機能です。 一般にマークアップ拡張機能を実装するのは、属性値をリテラル値やハンドラー名以外にエスケープする要件が存在し、その要件の適用範囲がグローバルで、特定の型やプロパティに型コンバーターを適用するだけにとどまらない場合です。 XAML のすべてのマークアップ拡張では、それぞれの属性構文で "{" と "}" の文字を使います。これは規約であり、これに従って XAML プロセッサは、マークアップ拡張で属性を処理する必要があることを認識します。

{StaticResource} の使用例

この例の XAML は、 XAML データ バインディング サンプルから取得

<StackPanel Margin="5">
    <!-- Add converter as a resource to reference it from a Binding. --> 
    <StackPanel.Resources>
        <local:S2Formatter x:Key="GradeConverter"/>
    </StackPanel.Resources>
    <TextBlock Style="{StaticResource BasicTextStyle}" Text="Percent grade:" Margin="5" />
    <Slider x:Name="sliderValueConverter" Minimum="1" Maximum="100" Value="70" Margin="5"/>
    <TextBlock Style="{StaticResource BasicTextStyle}" Text="Letter grade:" Margin="5"/>
    <TextBox x:Name="tbValueConverterDataBound"
      Text="{Binding ElementName=sliderValueConverter, Path=Value, Mode=OneWay,  
        Converter={StaticResource GradeConverter}}" Margin="5" Width="150"/> 
</StackPanel> 

この特定の例では、カスタム クラスによってサポートされるオブジェクトを作成し、それをリソースとして ResourceDictionary に作成します。 有効なリソースにするには、この local:S2Formatter 要素にも x:Key 属性値が必要です。 属性の値は "GradeConverter" に設定されます。

その後、リソースは XAML に少しだけ先に要求され、ここで {StaticResource GradeConverter}表示されます。

{StaticResource} マークアップ拡張機能の使用法で、別のマークアップ拡張機能のプロパティ {Binding} マークアップ拡張がどのように設定されているかに注意してください。そのため、ここには 2 つの入れ子になったマークアップ拡張機能の使用法があります。 最初に内部のリソースが取得され、値として使用できるように、内部の 1 つが最初に評価されます。 この同じ例は、{Binding} マークアップ拡張にも示されています。

{StaticResource} マークアップ拡張機能のデザイン時ツールのサポート

Microsoft Visual Studio 2013 では、XAML ページで {StaticResource} マークアップ拡張機能を使用する場合、Microsoft IntelliSense ドロップダウンに有効なキー値を含めることができます。 たとえば、「{StaticResource」と入力するとすぐに、現在の参照スコープのリソース キーのいずれかが IntelliSense ドロップダウンに表示されます。 ページ レベル (FrameworkElement.Resources) とアプリ レベル (Application.Resources) にある一般的なリソースに加えて、プロジェクトで使用している拡張機能の XAML テーマ リソースリソースも表示されます。

リソース キーが任意の {StaticResource} 使用法の一部として存在すると、 Go To Definition (F12) 機能でそのリソースを解決し、定義されているディクショナリを表示できます。 テーマ リソースの場合、これはデザイン時に generic.xaml に進みます。