2012-04-23 12 views
2

WPFのDynamicResourceのサポートは素晴らしいです。これは、ユーザーが実行中のアプリケーションの外観と倒れを変更できるようにするためです。WindowsのDynamicResourceはAppアプリを保存していますか?

WinRTではDynamicResourceはサポートされていませんが、

ユーザーが動的にUIテーマを変更できるようにするアプリを作成するには、どのような方法がおすすめですか?

答えて

0

MVVMパターンを使用する場合は、ビューとビューモデルとの結びつきに応じて、基盤となるデータを再作成することなく、切り替えられたテーマに基づいてビューを再作成するのはかなり簡単です。

複数のテーマリソース辞書があり、そのうちのどれをアプリケーションリソース辞書とマージするかを切り替えてから、ビューを再作成してください。

1

私は現在、これについても良いデザインを考え出しています。 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セクションに制約されているすべてのアプローチはバインド時に問題に遭遇するようです。

1

必ずしも動的リソースが必要なわけではありません。このような「静的」リソースの値を変更します。

Resources.Remove("foo"); 
Resources.Add("foo", "A new hope"); 

これは常に宣言型のものには使用できません。これらの場合にできることは、ラッパーオブジェクトを提供することです。ラッパーを置き換えることはできませんが、のプロパティを更新できます。悲しいことに、これは実行可能ではないケースがあります。

関連する問題