0

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

アプリケーションを実行すると、通常のスタイルが使用されるだけで、追加したマージされたリソースは考慮されません。ここで何が間違っていますか?マージされたリソース (および複数のリソース) を実行時に動的に追加し、正しく動作させるにはどうすればよいですか?

ありがとう、カイル

4

1 に答える 1

0

申し訳ありませんが、どうやらそれはうまくいくようです。前者の方法では、App.xaml で既定のスタイルが既に定義されていて、StaticResources を使用していましたが、DynamicResources を使用する必要があったマージされた辞書を使用するように変更しました。App.xaml のスタイルを消去したと思っていましたが、Visual Studio ソリューションに複数のプロジェクトがあったため、間違った App.xaml ファイルのスタイルを削除してしまいました!

同じソリューションに複数のプロジェクトがある場合、どの App.xaml ファイルを編集しているのかわからないようにする Visual Studio のくそったれ:-)。

またすみません!質問を削除する方法を知っていれば、削除します。

于 2009-11-23T01:37:50.257 に答える