ResourceDictionary从代码中替换

时间:2012-02-07 13:31:42

标签: windows-phone-7 resourcedictionary

我需要从网上下载RecourceDictionary并将其连接到项目。

所以在App.xaml中我有一个类似于当前ResourceDictionary的存根:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="ResourceDictionary.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

然后我下载并将新的ResourceDictionary(ResourceDictionary2.xaml)存储到IsolatedStorage。然后我需要用新的替换当前的那个。

事实上,如果这个另一个文件正好在项目文件夹中,我会这样做:

var newDict = new ResourceDictionary { 
     Source = new Uri("/WP7ResourceDictionaryTest;component/ResourceDictionary2.xaml", UriKind.Relative) 
};
ResourceDictionary appResources = App.Current.Resources;
appResources.MergedDictionaries.RemoveAt(0);
appResources.MergedDictionaries.Add(newDict);

此代码有效。

所以问题是:如何用IsoStorage中的文件替换当前的RecourceDictionary? 我试着像这样设置Uri:

newDict.Source = new Uri("isostore:/ResourceDictionary2.xaml");

但它不起作用。

1 个答案:

答案 0 :(得分:1)

首先,您应该使用找到的here

我的通用隔离存储实用程序

然后执行以下操作:

ResourceDictionary isoResourceDictionary = (ResourceDictionary)IsolatedStorage_Utility.Load<ResourceDictionary>(filename);
appResources.MergedDictionaries.RemoveAt(0);
appResources.MergedDictionaries.Add(isoResourceDictionary);

下一个问题是你 HAVE 在InitializComponents之前执行此操作,因为Silverligh / WP7 ONLY 允许使用StaticResources。解决此问题的唯一方法是刷新当前页面。