Web からリソースをロードするデスクトップ WPF アプリケーションがあります。これにより、必要に応じて、休日の前後にクリスマス テーマを追加するなど、さまざまなことができます。テーマをロードするには、Applications の現在のリソース ディクショナリを独自のリソース ディクショナリに置き換えます。
ResourceDictionary resources = null;
System.Net.WebClient client = new System.Net.WebClient();
using (Stream s = client.OpenRead("http://www.mywebsite.com/MyXAMLFile.xaml"))
{
try
{
resources = (ResourceDictionary)XamlReader.Load(s);
}
catch
{ }
}
Application.Current.Resources = resources;
さて、すべてを含む 1 つの大きなリソース ファイルだけを使用するのではなく、一部のリソースを別のファイルに分けたいというところまで来ました。マージされたリソースを使用するだけで、これはかなり簡単になると思いました。上記のコードを簡単に変更するだけで機能すると思っていましたが、そうではありません。これは、私がしなければならないと思っていたことです。
//replace the last line
Application.Current.Resources = resources;
//with this line
Application.Current.Resources.MergedDictionaries.Add(resources);
アプリケーションを実行すると、通常のスタイルが使用されるだけで、追加したマージされたリソースは考慮されません。ここで何が間違っていますか?マージされたリソース (および複数のリソース) を実行時に動的に追加し、正しく動作させるにはどうすればよいですか?
ありがとう、カイル