如何在运行时加载MergedResources?我的代码没有按预期工作

时间:2009-11-23 01:24:14

标签: wpf resourcedictionary mergeddictionaries

我有一个桌面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;

我们已经达到了这样的程度,我希望将一些资源分成不同的文件,而不是只使用包含所有内容的一个大资源文件。我认为只需使用合并资源就可以了。我认为对上面代码的一个简单修改会使它工作,但事实证明它没有。这就是我所期望的。

//replace the last line
Application.Current.Resources = resources;
//with this line
Application.Current.Resources.MergedDictionaries.Add(resources);

运行应用程序时,它只使用普通样式,而不考虑我添加的合并资源。我在这做错了什么?如何在运行时动态添加合并资源(和多个资源)并让它们正常工作?

谢谢, 凯尔

1 个答案:

答案 0 :(得分:0)

道歉,显然它确实有效。使用前一种方法,我已经在App.xaml中定义了默认样式,并使用了StaticResources,当我改为使用合并的字典时,我必须使用DynamicResources。我以为我删除了App.xaml中的样式,但由于我的Visual Studio解决方案中有多个项目,我删除了错误的App.xaml文件中的样式!

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

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