私は、ユーザーが外部のxamlファイルに基づいてカラースキームを変更できるアプリケーションを持っています。テーマの名前が含まれていたMenuItemをユーザーがクリックすると、次のコードを実行すると:ValueConvertersを含む、アプリケーション全体に伝播するリソースの変更を取得するにはどうすればよいですか?
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);
}
}
これは、アプリケーションのほとんどのために働く - 私のリソースのブラシのすべての変更 - 一つの例外を除いて。背景色はコンバーターを使用して値バインディングによって決定されるサブコントロールを持っています。むしろハードコードよりコンバータへの色は、しかし、私はブラシ名のコンバータを使用する文字列定数を持っていたし、その後App.Current.Resourcesから色を返す:
Brush ret = Application.Current.Resources[brushToReturn] as Brush;
何ここで起こっているようだがということですApplication.Current.Resourcesは、ウィンドウと同じリソースセットを保持していません。私は、Application.Current.Resourcesにテーマを読み込み、それをコンバーターで読み込もうとしましたが、どちらもうまくいかないようです。誰かが私がここで逃しているものを教えてくれる? Application.Current.Resourcesを変更して開いたウィンドウに影響を与える方法がありますか?
ありがとうございます!