2009-07-22 17 views
30

私は新しいWPFアプリケーションまたはWPFユーザーコントロールライブラリを作成するたびに、AssemblyInfo.csファイルには、次の属性が含まれていますThemeInfo属性とは何ですか?

[assembly: ThemeInfo(
    ResourceDictionaryLocation.None, 
    //where theme specific resource dictionaries are located 
    //(used if a resource is not found in the page, 
    // or application resource dictionaries) 
    ResourceDictionaryLocation.SourceAssembly 
    //where the generic resource dictionary is located 
    //(used if a resource is not found in the page, 
    // app, or any theme specific resource dictionaries) 
)] 

ため、このThemeInfo属性は何ですか?私はそれを削除すると、何かを壊すだろうか?

+1

男、私はこれを見つけてうれしいです!ビルドして別のプロジェクトに移動したカスタムBaseViewのため、ブランク/ブラックウィンドウが表示されていました。これを加えて固定しました! – Heliac

答えて

16

ThemeInfo属性は、自動テーマ作成メカニズムがテーマ辞書と汎用辞書を検索する場所を指定します。各オプションは、次のいずれかの値に設定できます。

  • なし(デフォルト):リソース辞書を検索しません。
  • SourceAssembly:辞書は現在のアセンブリです。
  • ExternalAssembly:辞書は別のアセンブリにあります。このアセンブリの名前は <AssemblyName>.<ThemeName>.dllである必要があります。<AssemblyName>は現在のアセンブリの の名前です。

テーマ辞書は、あなたがテーマの辞書のソースとしてアプリケーションを指定するThemeDictionaryExtensionを使用する必要があり、例えば、WPFは、System.Windows.Controls.ProgressBarSystem.Windows.Buttonよう制御し、外部のアセンブリで定義されているコントロールのスタイルを指定した場合。

+4

それはどういう意味ですか? 「テーマ辞書」とは何ですか? 「汎用辞書」とは何ですか?それらは何のため?彼らは重要ですか?私の質問で尋ねたように、属性を削除すると何かが壊れますか? –

+0

generic.xamlからテーマを取らないコントロールを削除するかどうか分かっているので、汎用テーマを検索する場所は –

+1

ありがとうございます!私は、テーマ定義のスタイルを外部定義されたコントロールに適用しようと夢中になってきました。私は 'ThemeDictionaryExtension'について全く知らなかった。一度私がそれを追加した、すべてが最終的に働いた!再度、感謝します!! –

5

WPFフレームワークは、コントロールにリソースを適用する便利な方法として、コントロールライブラリでこの属性を使用します。

WindowsはさまざまなUIテーマ(Aeroはそのような例の1つ)で実行できると考えてください。マイクロソフトが提供するWPFコントロールは、さまざまな環境テーマの外観を変更します。

アプリケーションでこの動作が必要な場合は、コントロールライブラリプロジェクトのthemesフォルダに別のテーマ辞書を作成できます。

マルチテーマをサポートする必要がない場合でも、アセンブリ内のコントロールにアクセスできるようにリソースをgeneric.xamlファイルに配置すると便利です。おそらくあなたの要素(コントロール)は.csファイルで.xaml部分クラスなしで定義されていて、必要なリソースを格納する必要があります。同じプロジェクト内の多くのWPF要素間で共有されるリソースがあれば、アセンブリ。

ここで参照する属性は、これらのリソースのマッピング用のメタデータです。

+0

Buttonのような標準的なテーマコントロールを使用している場合、属性は必要ありません。私はそれが必要なのは、(a)Aero vs Lunaなどで異なって見える必要がある自分のコントロールを最初から作成していた場合、(b)アセンブリにgeneric.xamlファイルがある場合どちらの場合でも、デフォルトは機能せず、属性が必要ですか? –

+0

はい、あなたは正しい道を歩いていますが、自分のコントロールについて話しているように、「デフォルト」のリソースはありません。あなたは 'generic.xaml'ファイルを介して到着した唯一のデフォルトです。そのディクショナリ内のリソースは、テーマ固有のリソースディクショナリエントリ(存在する場合)によって上書きされます。 –

関連する問題