WPF テーマ、スキン、スタイルなどについて多くのことを読みましたが、まだ達成できないことがあります。
各テーマ ファイル (Aero.NormalColor.xaml、Luna.NormalColor.xaml、または Aero2.NormalColor.xaml) に異なるスタイルを設定することで、OS テーマに応じてスタイル設定されたカスタム コントロールがあります。 .
App.xaml にテーマをロード/強制しません。各コントロール (ボタンなど) は、OS テーマに応じてスタイルを維持します。したがって、XP では XP ボタン、Windows 7 では Win7 ボタン、Windows 8 では Win8 ボタンが表示されます。
また、さまざまな通常の wpf コントロールの「名前付き」(明示的な x:Key) スタイルを含む App.xaml に読み込まれる ResourceDictionaries もあります。それらは次のようになります。
<Style x:Key="BlackComboBox" TargetType="{x:Type ComboBox}"></Style>
そして、私はそれらをこのように使用します
<ComboBox Style="{StaticResource BlackComboBox}"></ComboBox>
したがって、今のところ、私の BlackComboBox はすべての Windows (XP/7/8) で同じです。
私が達成しようとしているのは、コントロールをサブクラス化することなく、OS テーマに応じてこれらの通常のコントロールに異なるスタイルを設定することです (OS 固有のコントロールが必要な各コントロールにサブクラスを設定するのはやり過ぎだと思います)。そのため、BlackComboBox は OS ごとに異なる可能性があります。
既に同じキーを持つスタイルをテーマ ファイルに入れようとしましたが、うまくいかないようです。
目的の OS バージョンのスタイルを含む別の ResourceDictionary を実行時にロードすることを考えました。
- しかし、それは醜い解決策のように見えます。
- System.Environment.OSVersion をチェックする必要はありません。
- また、テーマに依存するのではなく、OS に依存します。
私にとって最良の方法は、ResourceDictionaries のスタイルをオーバーライドするテーマ ファイルに「名前付き」スタイルを設定できるようです。
助けてくれてありがとう!