2009-08-04 2 views
131

私は自分のResourceDictionaryファイルを組織化して再利用し、他のメンバーと共有する方法を見つけようとしています。Generic.xamlの特別な点は何ですか?

私はGeneric.xamlをよく見ていますが、MSDNのGeneric.xamlを見たり、Google検索を行ったりすると、ブログ記事やフォーラムの質問が出てくるようです本当に権威的で分かりやすいものに当たるようです。

Generic.xamlとMyRandomlyNamedResourceDictionary.xamlの違いは何ですか?いずれにしても、Source属性を持つライブラリに格納されているResourceDictionariesを参照する必要があります。例えば、:

Generic.xamlはどのような利点がありますか?アプリケーションに複数の「ルックス」(つまり、テーマが1つしかない場合)を出そうとしていないと、それは目的を持っていますか? generic.xamlファイル(大文字小文字を区別しない)のために

+4

(ユーザーコントロールではなく)カスタムコントロールで使用している場合は、generic.xaml辞書をコードにマージする必要はありません。 – Eternal21

答えて

128

WPFのすべてのコントロールには、特にコントロールのデフォルトのControlTemplateを提供する既定のスタイルがあります。 WPFは、コントロールと同じアセンブリ内のテーマフォルダ内の特別なリソース辞書の既定のスタイルを探します。既定のスタイルのキーは、Control.DefaultStyleKey依存プロパティによって提供されます。既定値は、Controlの各サブクラスでオーバーライドされます。

リソース辞書の名前は、現在のWindowsテーマに依存します。 VistaではAeroテーマを使用して、辞書はAero.NormalColor.xamlと呼ばれ、XPではデフォルトのテーマLuna.NormalColor.xamlを使用しています。そのスタイルがテーマディクショナリに見つからない場合は、Generic.xamlを見ます。つまり、そのスタイルがテーマに依存しないコントロールです。

これは、定義した任意のカスタムコントロール(コントロールから直接または間接的に派生したクラス)にのみ適用されます。標準コントロールの標準スタイルは、それから派生し、静的コンストラクタでDefaultStyleKeyProperty.OverrideMetadataを呼び出して変更できますが、ControlTemplateを含む完全なスタイルを指定する必要があります。

ThemeInfo属性を使用して、既定のスタイルの外部アセンブリを探すようにWPFに指示できます。外部アセンブリの名前は< YourAssembly >である必要があります。 < ThemeName > .dll PresententationFramework.Aero.dll。

+0

つまり、通常のButtonコントロール(Buttonから派生した独自の特別なクラスを作成しない)に新しいControlTemplateを提供したいのであれば、これは「テーマ」の一部とはみなされないと言っていますか? – devuxer

+0

標準コントロールを再テンプレートまたはスタイルを変更したい場合は、UserControl/Window/Application/Whateverレベルで通常のResources要素を使用します。暗黙的なキー(http://msdn.microsoft.com/en-us/library/ms750613.aspx#stylesimplicitkeys)でスタイルを使用すると、特定の種類のすべてのコントロールを変更できます。 –

+0

@Philリンクはもう役に立たない – Zaheylu

89

特別なものになるために、2つの条件が満たされる必要があります。

  • をそれはプロジェクト
  • にテーマサブルートフォルダにある必要がありますアセンブリをマークする必要がありますThemeInfoAttribute(通常はAssemblyInfo.cs

これは、コントロールに適用するデフォルトスタイルのデフォルトの検索場所として機能します。また、スタイルをデフォルトにするには、スタイルの対象となるコントロールのタイプとしてTargetTypeとx:Keyの両方を宣言する必要があります。

テーマとテーマの切り替えをアプリケーションに追加する場合は、いくつかのコーディングで完了しますが、この方法ではデフォルトのリソース辞書を定義するだけです。

+3

"デフォルトスタイル"の意味を明確にすることはできますか?これは、すべてのボタンがTargetTypeが "Button"のスタイルを自動的に引き受けることを意味しますか?あるいは、 '

+3

これについて私の頭に浮かべるもう一つの質問は、Generic.xamlでは、異なる要素のデフォルトの外観を定義したCSSファイル(例えば、 'h1 {color:#00ff00}')をWPFに相当するのでしょうか? – devuxer

+2

はい、明示的にキーを参照しなくてもデフォルトのスタイルが適用され、2つの同一のスタイルでは、辞書に2つの同一のキーがあるというエラーが表示されます。そして、はい、あなたはデフォルトの振る舞いについてそのように考えることができます。 –

関連する問題