WPFのDynamicResourceのサポートは素晴らしいです。これは、ユーザーが実行中のアプリケーションの外観と倒れを変更できるようにするためです。WindowsのDynamicResourceはAppアプリを保存していますか?
WinRTではDynamicResourceはサポートされていませんが、
ユーザーが動的にUIテーマを変更できるようにするアプリを作成するには、どのような方法がおすすめですか?
WPFのDynamicResourceのサポートは素晴らしいです。これは、ユーザーが実行中のアプリケーションの外観と倒れを変更できるようにするためです。WindowsのDynamicResourceはAppアプリを保存していますか?
WinRTではDynamicResourceはサポートされていませんが、
ユーザーが動的にUIテーマを変更できるようにするアプリを作成するには、どのような方法がおすすめですか?
MVVMパターンを使用する場合は、ビューとビューモデルとの結びつきに応じて、基盤となるデータを再作成することなく、切り替えられたテーマに基づいてビューを再作成するのはかなり簡単です。
複数のテーマリソース辞書があり、そのうちのどれをアプリケーションリソース辞書とマージするかを切り替えてから、ビューを再作成してください。
私は現在、これについても良いデザインを考え出しています。 DynamicResourcesの不足を発見する前に、私はかなり準備ができていました。おっとっと。
私が出ている最良の方法は、設定VMへの変更をリッスンし、UI要素がバインドできるリソースを公開ThemedViewModel基盤を持つことです。
public class ThemedViewModel : ViewModelBase
{
public Brush Foreground { get { return ViewModelSelector.Settings.Theme.Foreground; } }
public ThemedViewModel()
{
ViewModelSelector.Settings.PropertyChanged += (sender,arg) =>
{
if(arg.PropertyName == "Theme")
{
RaisePropertyChanged("Foreground");
}
}
}
}
その後、任意のTHEME-を導き出すだろうこれからテーマベースのVMを取得し、テーマのUI要素は公開されたリソースにバインドします。それはかなり乾いていますが、私の心の中ではVMのポイントが本当に分かりません。 VMにUIリソースが含まれていてはなりません。 VMでどのように見えるのかは、私とうまくはいかない。しかし、テーマが私のコードのViewセクションに制約されているすべてのアプローチはバインド時に問題に遭遇するようです。
必ずしも動的リソースが必要なわけではありません。このような「静的」リソースの値を変更します。
Resources.Remove("foo");
Resources.Add("foo", "A new hope");
これは常に宣言型のものには使用できません。これらの場合にできることは、ラッパーオブジェクトを提供することです。ラッパーを置き換えることはできませんが、はのプロパティを更新できます。悲しいことに、これは実行可能ではないケースがあります。