2

DynamicResource に対する WPF のサポートは優れています。これにより、ユーザーは実行中のアプリケーションの外観を変更できるからです。

ただし、WinRT は DynamicResource をサポートしていません。

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

4

3 に答える 3

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");
            }
        }
    }
}

次に、これからテーマベースのVMを派生させ、テーマ化されたUI要素を公開されたリソースにバインドします。それはかなり乾燥していますが、私の心の中でVMのポイントを本当に壊します。VMにはUIリソースが含まれていてはなりません。VMでどのように見えるかを知ることは、私にはうまくいきません。しかし、テーマがコードの表示セクションに制限されているすべてのアプローチは、バインド時に問題が発生するようです。

于 2013-01-23T04:41:34.353 に答える
0

MVVMパターンを使用する場合、ビューとビューモデルを組み合わせる方法によっては、基になるデータを再作成せずに、切り替えられたテーマに基づいてビューを再作成するのはかなり簡単です。

複数のテーマリソースディクショナリを用意し、それらのどれをアプリケーションリソースディクショナリとマージするかを切り替えてから、ビューを再作成するだけです。

于 2012-04-23T21:35:16.673 に答える