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の Pack URI」を参照してください。

注釈

この拡張機能は、1 つの特定のプロパティ値 (ResourceDictionary.Sourceの値) のみを入力することを目的としています。

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

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

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

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

ThemeDictionary は、Member プロパティを「プロパティ=値」のペアとして指定する冗長な属性使用法でも利用可能です。

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

詳細な使用方法は、多くの場合、複数の設定可能なプロパティを持つ拡張機能や、一部のプロパティが省略可能な場合に役立ちます。 ThemeDictionary には必須の設定可能なプロパティが 1 つしかないため、この冗長な使い方は一般的ではありません。

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

ThemeDictionary はマークアップ拡張機能です。 マークアップ拡張は通常、リテラル値またはハンドラー名以外の属性値をエスケープする必要があり、特定の型またはプロパティに型コンバーターを配置するよりもグローバルな要件である場合に実装されます。 XAML のすべてのマークアップ拡張では、{および } 文字が属性構文で使用されます。これは、マークアップ拡張が属性を処理する必要があることを XAML プロセッサが認識する規則です。 詳細については、「マークアップ拡張機能 WPF XAML」を参照してください。

こちらも参照ください