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

定義されたリソースへの参照としてその値を延期することによって、XAMLXAML property 属性の値を提供します。Provides a value for any XAMLXAML property attribute by deferring that value to be a reference to a defined resource. このリソースの参照動作は、ランタイム参照に似ています。Lookup behavior for that resource is analogous to run-time lookup.

XAML 属性の使用方法XAML Attribute Usage

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

XAML プロパティ要素の使用XAML Property Element Usage

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

XAML 値XAML Values

key 要求されたリソースのキー。The key for the requested resource. このキーは、リソースがマークアップで作成された場合はX:Key ディレクティブによって最初に割り当てられたか、またはリソースがコードで作成された場合に ResourceDictionary.Add を呼び出すときに key パラメーターとして指定されました。This key was initially assigned by the x:Key Directive if a resource was created in markup, or was provided as the key parameter when calling ResourceDictionary.Add if the resource was created in code.

RemarksRemarks

DynamicResource は、初期コンパイル中に一時式を作成するため、オブジェクトを構築するために要求されたリソース値が実際に必要になるまで、リソースの参照を延期します。A DynamicResource will create a temporary expression during the initial compilation and thus defer lookup for resources until the requested resource value is actually required in order to construct an object. これは、XAMLXAML ページが読み込まれた後に発生する可能性があります。This may potentially be after the XAMLXAML page is loaded. リソース値は、現在のページスコープから始まるすべてのアクティブなリソースディクショナリに対するキー検索に基づいて検出され、コンパイルからのプレースホルダー式の代わりに使用されます。The resource value will be found based on key search against all active resource dictionaries starting from the current page scope, and is substituted for the placeholder expression from compilation.

重要

依存関係プロパティの優先順位に関しては、DynamicResource 式は動的リソース参照が適用される位置と同じです。In terms of dependency property precedence, a DynamicResource expression is equivalent to the position where the dynamic resource reference is applied. 以前にローカル値として DynamicResource 式を持つプロパティのローカル値を設定した場合、DynamicResource は完全に削除されます。If you set a local value for a property that previously had a DynamicResource expression as the local value, the DynamicResource is completely removed. 詳細については、「依存関係プロパティ値の優先順位」を参照してください。For details, see Dependency Property Value Precedence.

特定のリソースアクセスシナリオは、 StaticResource のマークアップ拡張機能ではなく DynamicResource に特に適しています。Certain resource access scenarios are particularly appropriate for DynamicResource as opposed to a StaticResource Markup Extension. DynamicResourceStaticResourceの相対的な利点とパフォーマンスへの影響については、「 XAML リソース」を参照してください。See XAML Resources for a discussion about the relative merits and performance implications of DynamicResource and StaticResource.

指定された ResourceKey は、ページ、アプリケーション、使用可能なコントロールのテーマと外部リソース、またはシステムリソースのいずれかのレベルで、 X:Key ディレクティブによって決定される既存のリソースに対応する必要があります。その順序。The specified ResourceKey should correspond to an existing resource determined by x:Key Directive at some level in your page, application, the available control themes and external resources, or system resources, and the resource lookup will happen in that order. 静的リソースと動的リソースのリソース検索の詳細については、「 XAML リソース」を参照してください。For more information about resource lookup for static and dynamic resources, see XAML Resources.

リソースキーは、 XamlName 文法で定義されている任意の文字列にすることができます。A resource key may be any string defined in the XamlName Grammar. リソースキーは、Typeなど、他の種類のオブジェクトである場合もあります。A resource key may also be other object types, such as a Type. Type キーは、テーマによってコントロールをスタイル設定する方法の基本となります。A Type key is fundamental to how controls can be styled by themes. 詳細については、「コントロールの作成の概要」を参照してください。For more information, see Control Authoring Overview.

FindResourceなどのリソース値を参照するための Api は、DynamicResourceによって使用されるのと同じリソース参照ロジックに従います。APIs for lookup of resource values, such as FindResource, follow the same resource lookup logic as used by DynamicResource.

リソースを参照する別の宣言的な方法は、 StaticResource マークアップ拡張機能です。The alternative declarative means of referencing a resource is as a StaticResource Markup Extension.

属性構文は、このマークアップ拡張機能で使用される最も一般的な構文です。Attribute syntax is the most common syntax used with this markup extension. DynamicResource 識別子文字列の後に設定される文字列トークンは、基になる ResourceKey 拡張クラスの DynamicResourceExtension 値として割り当てられます。The string token provided after the DynamicResource identifier string is assigned as the ResourceKey value of the underlying DynamicResourceExtension extension class.

DynamicResource は、オブジェクト要素構文で使用できます。DynamicResource can be used in object element syntax. この場合は、ResourceKey プロパティの値を指定する必要があります。In this case, specifying the value of the ResourceKey property is required.

DynamicResource は、ResourceKey プロパティをプロパティおよび値のペアとして指定する詳細出力属性使用でも使用できます。DynamicResource can also be used in a verbose attribute usage that specifies the ResourceKey property as a property=value pair:

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

詳細出力の使用は、複数の設定可能プロパティを持つ拡張機能や、一部のプロパティがオプションである場合に役立ちます。The verbose usage is often useful for extensions that have more than one settable property, or if some properties are optional. DynamicResource には、必須の設定可能プロパティが 1 つしか存在しないため、このような詳細出力の使用は一般的ではありません。Because DynamicResource has only one settable property, which is required, this verbose usage is not typical.

WPFWPF XAMLXAML プロセッサの実装では、このマークアップ拡張機能の処理は DynamicResourceExtension クラスによって定義されます。In the WPFWPF XAMLXAML processor implementation, the handling for this markup extension is defined by the DynamicResourceExtension class.

DynamicResource はマークアップ拡張機能です。DynamicResource is a markup extension. 一般にマークアップ拡張機能を実装するのは、属性値をリテラル値やハンドラー名以外にエスケープする要件が存在し、その要件の適用範囲がグローバルで、特定の型やプロパティに型コンバーターを適用するだけにとどまらない場合です。Markup extensions are typically implemented when there is a requirement to escape attribute values to be other than literal values or handler names, and the requirement is more global than just putting type converters on certain types or properties. XAMLXAML 内のすべてのマークアップ拡張機能は、属性構文で {および} 文字を使用します。これは、マークアップ拡張機能が属性を処理する必要があることを XAMLXAML プロセッサが認識する規則です。All markup extensions in XAMLXAML use the { and } characters in their attribute syntax, which is the convention by which a XAMLXAML processor recognizes that a markup extension must process the attribute. 詳細については、「マークアップ拡張機能」および「WPF XAML」を参照してください。For more information, see Markup Extensions and WPF XAML.

関連項目See also