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 ディレクティブによって識別された、既存のリソースに対応するキーでなければなりません。 リソースの検索はその順序で行われます。 静的リソースと動的リソースのリソース検索動作の詳細については、「リソースの概要」を参照してください。
リソース キーは、XamlName の文法で定義されている任意の文字列にすることができます。 Type などの他のオブジェクト型にすることもできます。 Type キーは、暗黙のスタイル キーを通して、コントロールをテーマごとにどのようにデザインするかを決定するのに重要です。 詳細については、「コントロールの作成の概要」を参照してください。
これとは別の、リソース参照の宣言的手段には、DynamicResource のマークアップ拡張機能を使用する方法があります。
属性構文は、このマークアップ拡張機能で使用される最も一般的な構文です。 StaticResource 識別子文字列の後に設定される文字列トークンは、基になる StaticResourceExtension 拡張クラスの ResourceKey 値として割り当てられます。
StaticResource は、オブジェクト要素構文で使用できます。 この場合、ResourceKey プロパティの値の指定は必須です。
StaticResource は、ResourceKey プロパティをプロパティおよび値のペアとして指定する詳細出力属性使用でも使用できます。
<object property="{StaticResource ResourceKey=key}" .../>
詳細出力の使用は、複数の設定可能プロパティを持つ拡張機能や、一部のプロパティがオプションである場合に役立ちます。 StaticResource には、必須の設定可能プロパティが 1 つしか存在しないため、このような詳細出力の使用は一般的ではありません。
WPF XAML プロセッサ実装では、このマークアップ拡張機能の処理は、StaticResourceExtension クラスによって定義されます。
StaticResource はマークアップ拡張機能です。 一般にマークアップ拡張機能を実装するのは、属性値をリテラル値やハンドラー名以外にエスケープする要件が存在し、その要件の適用範囲がグローバルで、特定の型やプロパティに型コンバーターを適用するだけにとどまない場合です。 XAML のすべてのマークアップ拡張機能では、それぞれの属性構文で { と } の 2 つの記号を使用します。これは規約であり、これに従って XAML プロセッサは、マークアップ拡張機能で属性を処理する必要があることを認識します。 詳細については、「マークアップ拡張機能と WPF XAML」を参照してください。