私は、ResourceDictionary ファイルを整理して再利用し、チームの他のメンバーと共有する方法を模索してきました。
「Generic.xaml」に何度も遭遇しますが、MSDN で Generic.xaml を検索したり、Google 検索を実行したりすると、たまたまそれについて言及しているブログ投稿やフォーラムの質問しか表示されないようです。本当に信頼できて明確なものは見つからないようです。
Generic.xaml と MyRandomlyNamedResourceDictionary.xaml の違いは何ですか? どちらの場合も、ライブラリに保存されている ResourceDictionary を Source 属性で参照する必要があるようです。例:
<Application.Resources>
<ResourceDictionary
Source="/CommonLibraryWpfThemes;component/Themes/Generic.xaml"
</Application.Resources>
では、Generic.xaml は具体的にどのような利点を提供するのでしょうか? アプリケーションに複数の「外観」を与えようとしていない場合 (つまり、テーマが 1 つしかない場合)、Generic.xaml には何か目的があるのでしょうか?
ベストアンサー1
WPF のすべてのコントロールには、コントロールのデフォルトなどを提供するデフォルトのスタイルがありますControlTemplate
。WPF は、コントロールと同じアセンブリの Themes フォルダーにある特別なリソース ディクショナリで、デフォルトのスタイルを検索します。デフォルトのスタイルのキーはControl.DefaultStyleKey
依存関係プロパティによって提供され、そのデフォルト値はコントロールの各サブクラスでオーバーライドされます。
リソース ディクショナリの名前は、現在の Windows テーマによって異なります。たとえば、Vista で Aero テーマを使用している場合、ディクショナリの名前は Aero.NormalColor.xaml になり、XP で既定のテーマを使用している場合、ディクショナリの名前は Luna.NormalColor.xaml になります。テーマ ディクショナリにスタイルが見つからない場合は、Generic.xaml で、つまり、外観がテーマに依存しないコントロールを検索します。
これは、定義したカスタム コントロール、つまり Control から直接または間接的に派生したクラスにのみ適用されます。標準コントロールの既定のスタイルを変更するには、そのコントロールから派生し、DefaultStyleKeyProperty.OverrideMetadata
静的コンストラクターで呼び出します。ただし、その場合は ControlTemplate を含む完全なスタイルを指定する必要があります。
ThemeInfo 属性を使用して、WPF に外部アセンブリで既定のスタイルを検索するように指示できます。外部アセンブリの名前は<
YourAssembly >
. <
ThemeName >
.dll (例: PresententationFramework.Aero.dll) にする必要があります。