1. ホーム
  2. wpf

[解決済み] Generic.xamlの特徴とは?

2022-04-30 06:21:08

質問

ResourceDictionaryファイルを再利用したり、チームの他のメンバーと共有したりするために、どのように整理したらよいかを考えています。

しかし、MSDNでGeneric.xamlを検索したり、Googleで検索しても、ブログの記事やフォーラムの質問がヒットするだけで、本当に権威のある明確なものは見つかりません。

Generic.xamlとMyRandomlyNamedResourceDictionary.xamlの違いは何ですか?どちらにしても、ライブラリに格納されているResourceDictionaryをSource属性で参照する必要があるようです。例えば、、、。

<Application.Resources>
    <ResourceDictionary
        Source="/CommonLibraryWpfThemes;component/Themes/Generic.xaml"
</Application.Resources>

では、Generic.xamlは具体的にどのような利点をもたらすのでしょうか?アプリケーションに複数の外観を与えようとしない場合(つまり、テーマが1つしかない場合)、これは何か意味があるのでしょうか?

どのように解決するのですか?

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

リソース辞書の名前は現在のWindowsテーマに依存します。例えば、Aeroテーマを使用しているVistaでは、辞書の名前はAero.NormalColor.xaml、デフォルトテーマを使用しているXPでは、Luna.NormalColor.xamlとなります。テーマ辞書にスタイルがない場合は、Generic.xaml を検索します。つまり、テーマに依存しない外観のコントロールを検索します。

これは、直接または間接的にControlから派生したクラスなど、あなたが定義したカスタムコントロールにのみ適用されます。標準のコントロールのデフォルトのスタイルを変更するには、そのコントロールから派生したクラスで DefaultStyleKeyProperty.OverrideMetadata を静的コンストラクタで指定する必要がありますが、その場合は ControlTemplate を含む完全なスタイルを指定する必要があります。

ThemeInfo属性を使用すると、デフォルトのスタイルを外部アセンブリで検索するようにWPFに指示できることに注意してください。外部アセンブリの名前は < YourAssembly > . < テーマ名 > .dll(例:PresentationFramework.Aero.dll)。