DynamicResource マークアップ拡張機能
定義されたリソースへの参照としてその値を遅延させて、XAML プロパティ属性の値を提供します。 そのリソースの参照動作は、実行時の参照に似ています。
XAML 属性の使用法
<object property="{DynamicResource key}" ... />
XAML プロパティ要素の使用法
<object>
<object.property>
<DynamicResource ResourceKey="key" ... />
</object.property>
</object>
XAML 値
価値 | 説明 |
---|---|
key |
要求されたリソースのキー。 このキーは、リソースがマークアップで作成された場合は x:Key ディレクティブ によって最初に割り当てられたか、リソースがコードで作成された場合に ResourceDictionary.Add を呼び出すときに key パラメーターとして指定されました。 |
備考
DynamicResource
は、初期コンパイル時に一時式を作成するため、オブジェクトを構築するために要求されたリソース値が実際に必要になるまでリソースの検索を延期します。 これは、XAML ページが読み込まれた後である可能性があります。 リソース値は、現在のページ スコープから開始するすべてのアクティブなリソース ディクショナリに対するキー検索に基づいて検出され、コンパイル時のプレースホルダー式に置き換えられます。
大事な
依存関係プロパティの優先順位では、DynamicResource
式は動的リソース参照が適用される位置と同じです。 以前に DynamicResource
式をローカル値として持っていたプロパティのローカル値を設定した場合、DynamicResource
は完全に削除されます。 詳細については、「依存関係プロパティ値の優先順位 」を参照してください。
特定のリソース アクセス シナリオは、StaticResource Markup Extensionではなく、DynamicResource
に特に適しています。 DynamicResource
と StaticResource
の相対的なメリットとパフォーマンスへの影響については、XAML リソースの に関するページを参照してください。
指定した ResourceKey は、ページ、アプリケーション、使用可能なコントロール テーマと外部リソース、またはシステム リソースのレベルで、x:Key ディレクティブ によって決定される既存のリソースに対応する必要があります。リソース参照はその順序で行われます。 静的リソースと動的リソースのリソース検索の詳細については、「XAML リソース」を参照してください。
リソース キーには、XamlName Grammarで定義されている任意の文字列を指定できます。 リソース キーには、Typeなど、他のオブジェクトの種類を指定することもできます。 Type キーは、テーマでコントロールをスタイル設定する方法の基本です。 詳細については、「コントロールの作成の概要」を参照してください。
FindResourceなどのリソース値を検索するための API は、DynamicResource
で使用されるのと同じリソース参照ロジックに従います。
リソースを参照する別の宣言的手段は、StaticResource マークアップ拡張
属性構文は、このマークアップ拡張で使用される最も一般的な構文です。 DynamicResource
識別子文字列の後に指定された文字列トークンは、基になる DynamicResourceExtension 拡張クラスの ResourceKey 値として割り当てられます。
DynamicResource
は、オブジェクト要素の構文で使用できます。 この場合、ResourceKey プロパティの値を指定する必要があります。
DynamicResource
は、ResourceKey プロパティを property=value ペアとして指定する詳細属性の使用法でも使用できます。
<object property="{DynamicResource ResourceKey=key}" ... />
詳細な使用方法は、多くの場合、複数の設定可能なプロパティを持つ拡張機能や、一部のプロパティが省略可能な場合に役立ちます。 DynamicResource
には必須の設定可能なプロパティが 1 つしかないため、この冗長な使用方法は一般的ではありません。
WPF XAML プロセッサの実装では、このマークアップ拡張機能の処理は、DynamicResourceExtension クラスによって定義されます。
DynamicResource
はマークアップ拡張機能です。 マークアップ拡張は通常、リテラル値またはハンドラー名以外の属性値をエスケープする必要があり、特定の型またはプロパティに型コンバーターを配置するよりもグローバルな要件である場合に実装されます。 XAML のすべてのマークアップ拡張では、{および } 文字が属性構文で使用されます。これは、マークアップ拡張が属性を処理する必要があることを XAML プロセッサが認識する規則です。 詳細については、「マークアップ拡張機能 WPF XAML」を参照してください。
参照
- XAML リソース
- リソースとコード
- x:Key ディレクティブ を
する - WPF における XAML
- マークアップ拡張機能と WPF XAML
- StaticResource マークアップ拡張機能
- マークアップ拡張機能と WPF XAML
.NET Desktop feedback