WPF(C#)で、ライトモード&ダークモードで使用する各コントロールの色情報はどこで保持しておくべきでしょうか?知識のある方ご教授いただけると幸いです。
こんにちは、最近WPFを勉強しはじめた者です。
私はコントロールの形状や色にかなりのこだわりを持っていて、
各々のコントロールの色(カラーコード)をライト・ダークモードの2パターン作り、
現在はその情報をアプリで唯一のviewModelクラスに保持している状態です。
全てのコントロールがその色データとバインドされてますので、SetDark()関数を実行すると、viewModelクラスの中のデータが書き代わるようになっており、
これでコントロールの色の切り替えを実装していますが、
この方法だと、全てのWindowで同じviewModelクラスを参照していないといけなくて、
各々のウィンドウでしか扱わないデータの分離ができません。
(そもそも外観のみに影響する色データはここでは扱ってはいけない気もしております...)
また別のやり方として、App.xaml内にそれぞれのコントロールが共有する色情報を
<SolidColorBrush...>で記述するのもありかと思いましたが、
各コントロールに独自のプロパティ( "IsDarkMode" のような) を持たせる必要があり、
トリガー(<Trigger>)でそのプロパティがTrueになったときにコントロールの細かい部分すべてに
<Setter> を呼んで色情報を変更させる必要があり、
私はControlTemplateでカスタムの外観を作っているので、コントロールの中のすべての要素にx:Key (x:Name)を指定しなければならず、これは結構面倒なコードになってしまうため今のところ回避しています。
(本当はこれが正しいやり方なのかもしれません)
さらに別のやり方としてカスタムコントロールクラスの.xamlファイルに色情報を記述すれば、
そもそもviewModelクラスに色情報を参照する必要がなくなるので、
各々のウィンドウでviewModel内のデータの分離が可能ですが、
この場合だと後で色情報を変えたいときには、全てのコントロールのxamlファイルを書き換える必要があり、とても面倒です。
(別のコントロールでカラーコードが重複してダブっているためです)
色の管理も楽にできて、それぞれのウィンドウが各々のViewModelを参照できるやり方はないでしょうか?
ここに提示した文章がわかりにくいかもしれませんので、細かい内容等は無視してしまっても大丈夫ですが、ただ私の悩みはシンプルで、ライトモード・ダークモードの各カラーコードをどこに保持しておくのが適確であり安全なのかを知りたいだけです。
WPFのプログラミングに詳しい経験者の方などおりましたら、知識をいただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/04/07 03:16