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

カスタム コントロールの作成者またはサードパーティのコントロールを統合するアプリケーションに、コントロールのスタイル設定に使用するテーマ固有のリソース ディクショナリを読み込む方法を提供します。

XAML 属性の使用方法

<object property="{ThemeDictionary assemblyUri}" ... />  

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

<object>  
  <object.property>  
    <ThemeDictionary AssemblyName="assemblyUri"/>  
  <object.property>  
<object>  

XAML 値

説明
assemblyUri テーマの情報が格納されているアセンブリの URI (Uniform Resource Identifier)。 通常、これは大きなパッケージ内のアセンブリを参照するパック URI です。 アセンブリ リソースとパック URI によって、配置の問題が簡単になります。 詳細については、「WPF におけるパッケージの URI」を参照してください。

Remarks

この拡張機能では、1 つの特定のプロパティ値、つまり ResourceDictionary.Source の値を設定することだけが意図されています。

この拡張機能を使用すると、単一リソースのみのアセンブリを指定できます。それには、Windows Aero テーマがユーザーのシステムに適用されている場合にのみ使用されるスタイル、Luna テーマがアクティブになっている場合にのみ使用される他のスタイル、などが含まれます。 この拡張機能を使用することで、必要に応じて、コントロール固有のリソース ディクショナリの内容を自動的に無効にし、別のテーマに合わせて再度読み込むことができます。

assemblyUri の文字列 (AssemblyName プロパティの値) は、特定のテーマに適用されるディクショナリを識別する名前付け規則の基礎となります。 ThemeDictionary に対する ProvideValue のロジックにより、プリコンパイル済みのリソース アセンブリに含まれる、特定のテーマ ディクショナリのバリエーションを指す Uniform Resource Identifier (URI) を生成することによって、規則が完成されます。 この規則、または一般的なコントロールのスタイル設定およびページやアプリケーション レベルのスタイル設定とのテーマの相互作用の概念については、ここでは説明しません。 ThemeDictionary を使用する基本的なシナリオは、アプリケーション レベルで宣言された ResourceDictionarySource プロパティを指定する場合です。 ダイレクト URI ではなく ThemeDictionary 拡張を使用してアセンブリの URI を指定すると、システム テーマが変更されるたびに適用される無効化ロジックが拡張ロジックによって提供されます。

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

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

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

<object property="{ThemeDictionary AssemblyName=assemblyUri}" ... />  

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

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

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

関連項目