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

定義されているリソースの値が山処すあれるように遅延することによって、XAML のプロパティ属性の値を提供します。 そのリソース検索動作は、実行時の検索に類似しています。

XAML 属性の使用方法

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

XAML プロパティ要素の使用

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

XAML 値

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

Remarks

DynamicResource では、初期コンパイル中に一時式が作成されます。そのため、オブジェクトを構築するために要求されたリソース値が実際に必要になるまで、リソースの検索が遅延されます。 これは、XAML ページが読み込まれた後になる可能性があります。 リソースの値は、現在のページ スコープから始まるすべてのアクティブなリソース ディクショナリに対するキー検索に基づいて検出され、コンパイル時のプレースホルダー式の代わりに使用されます。

重要

依存関係プロパティの優先順位に関しては、DynamicResource 式は動的リソース参照が適用される位置と同じです。 以前はローカル値として DynamicResource 式が使用されていたプロパティに対してローカル値を設定した場合、DynamicResource は完全に削除されます。 詳細については、「依存関係プロパティ値の優先順位」を参照してください。

特定のリソース アクセス シナリオは、StaticResource マークアップ拡張ではなく DynamicResource に特に適しています。 DynamicResourceStaticResource の相対的な利点とパフォーマンスへの影響については、XAML のリソースに関する記事を参照してください。

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

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

FindResource などのリソース値を検索するための API は、DynamicResource によって使用されているものと同じリソース検索ロジックに従います。

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

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

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

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

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

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

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

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

関連項目