0

ユーザーが外部の xaml ファイルに基づいて配色を変更できるようにするアプリケーションがあります。ユーザーがテーマの名前を含む MenuItem をクリックすると、次のコードが実行されます。

MenuItem mi = sender as MenuItem;
string executingDirectory = Assembly.GetExecutingAssembly().Location.Substring(0, Assembly.GetExecutingAssembly().Location.LastIndexOf("\\"));
string path = System.IO.Path.Combine(executingDirectory + "\\Themes", mi.Header.ToString() + ".xaml");

if (File.Exists(path))
{
    using (FileStream fs = new FileStream(path, FileMode.Open))
    {
        ResourceDictionary dic = (ResourceDictionary)XamlReader.Load(fs);
        Resources.MergedDictionaries.Clear();
        Resources.MergedDictionaries.Add(dic);
    }
}

これは、1 つの例外を除いて、ほとんどのアプリケーション (私のリソース ブラシはすべて変更されます) で機能します。コンバーターを使用した値バインディングによって背景色が決定されるサブコントロールがあります。ただし、色をコンバーターにハードコードするのではなく、コンバーターでブラシ名に文字列定数を使用し、App.Current.Resources から色を返すようにしました。

Brush ret = Application.Current.Resources[brushToReturn] as Brush;

ここで起こっているように見えるのは、Application.Current.Resources がウィンドウと同じリソース セットを保持していないことです。テーマを Application.Current.Resources にロードしてコンバーターで読み込もうとしましたが、それもうまくいかないようです。ここで何が欠けているのか誰か教えてもらえますか? たとえば、Application.Current.Resources を変更して、開いているウィンドウに影響を与える方法はありますか?

ありがとう!

4

1 に答える 1