StaticResource のマークアップ拡張機能

既に定義されているリソースへの参照を検索することによって、任意の XAML プロパティ属性の値を提供します。 そのリソースに対する検索動作は、読み込み時の検索に似ています。これにより、現在の XAML ページおよび他のアプリケーション ソースのマークアップから以前に読み込まれたリソースが検索され、実行時オブジェクトのプロパティ値としてそのリソース値が生成されます。

XAML 属性の使用方法

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

XAML オブジェクト要素の使用方法

<object>  
  <object.property>  
<StaticResource ResourceKey="key" ... />  
  </object.property>  
</object>  

XAML 値

説明
key 要求されたリソースのキー。 このキーは、リソースがマークアップで作成された場合は x:Key ディレクティブによって最初に割り当てられ、リソースがコードで作成された場合は ResourceDictionary.Add を呼び出すときに key パラメーターとして提供されています。

解説

重要

StaticResource では、XAML ファイル内で構文的にさらに定義されているリソースへの前方参照を試行することはできません。 それを試みることはサポートされておらず、このような参照が失敗しない場合でも、前方参照を試行すると、ResourceDictionary を表す内部ハッシュ テーブルが検索されるときに、読み込み時間のパフォーマンスが低下します。 最良の結果を得るには、前方参照を回避できるように、リソース ディクショナリの構成を調整します。 前方参照を回避できない場合は、代わりに DynamicResource マークアップ拡張を使用します。

指定する ResourceKey は、ページ、アプリケーション、使用可能なコントロール テーマと外部リソース、またはシステム リソースのいずれかのレベルで x:Key ディレクティブによって示される既存のリソースに対応している必要があります。 リソースの検索は、その順序で行われます。 静的リソースと動的リソースのリソース検索動作の詳細については、XAML のリソースに関する記事を参照してください。

リソース キーは、XamlName 文法で定義されている任意の文字列の可能性があります。 リソース キーは、Type などの他のオブジェクト型の場合もあります。 Type キーは、暗黙的なスタイル キーにより、テーマによってコントロールのスタイルを設定する方法の基礎になります。 詳しくは、「コントロールの作成の概要」を参照してください。

リソースを参照する別の宣言的な方法は、DynamicResource マークアップ拡張として機能します。

属性構文は、このマークアップ拡張機能で使用される最も一般的な構文です。 StaticResource 識別子文字列の後に設定される文字列トークンは、基になる ResourceKey 拡張クラスの StaticResourceExtension 値として割り当てられます。

StaticResource は、オブジェクト要素構文で使用できます。 この場合は、ResourceKey プロパティの値を指定する必要があります。

StaticResource は、ResourceKey プロパティをプロパティおよび値のペアとして指定する詳細出力属性使用でも使用できます。

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

詳細出力の使用は、複数の設定可能プロパティを持つ拡張機能や、一部のプロパティがオプションである場合に役立ちます。 StaticResource には、必須の設定可能プロパティが 1 つしか存在しないため、このような詳細出力の使用は一般的ではありません。

WPF の XAML プロセッサの実装では、このマークアップ拡張の処理は StaticResourceExtension クラスによって定義されています。

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

関連項目