33

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

[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属性の目的は何ですか? 外すと何か壊れますか?

4

2 に答える 2

19

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

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

テーマ ディクショナリが外部アセンブリで定義されているコントロールのスタイルを指定する場合 (たとえば、System.Windows.Controls.ProgressBarやなどの WPF コントロールSystem.Windows.Button)、 を使用しThemeDictionaryExtensionてアプリケーションをテーマ ディクショナリのソースとして指定する必要があります。

于 2009-07-22T04:18:39.050 に答える
5

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

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

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

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

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

于 2009-07-22T06:17:21.930 に答える