0

我有一个桌面 WPF 应用程序,它从 Web 加载它的资源,这使我们能够做不同的事情,比如......如果我们愿意,可以在假期前后添加一个圣诞主题。要加载主题,我只需将应用程序当前资源字典替换为我们自己的资源字典,就像这样。

        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;

好吧,我们到了我想将一些资源分成不同文件的地步,而不是只使用一个包含所有内容的大资源文件。我认为这将是相当简单的只是使用合并的资源。我认为对上面的代码进行简单的修改就可以使它工作,但事实证明它没有。这是我期望我必须做的。

//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 文件中的样式!

如果同一个解决方案中有多个项目,那么该死的 Visual Studio 就无法判断您正在编辑的 App.xaml 文件:-)。

再次抱歉!如果我知道如何删除一个问题,我会的。

于 2009-11-23T01:37:50.257 回答