2012-02-07 62 views
0

我需要从网上下载RecourceDictionary并将其连接到项目。从代码中的ResourceDictionary替换

所以在App.xaml中我有类似与目前的ResourceDictionary存根:

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

然后我下载和存储新的资源字典(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? 我tryed设置乌里这样的:

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

,但它不工作。

+0

这是什么-1?你有什么建议? – giacoder 2012-02-07 14:42:24

回答

1

你应该用我的泛型第一孤立存储公用发现here

然后执行以下操作:

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

下一个问题是你HAVE InitializComponents之前做到这一点,因为Silverligh/WP7 仅限允许StaticResources。唯一的解决方法是刷新当前页面。

+0

谢谢。我认为它不会与xaml一起使用。第一行返回错误“第1行中的错误位置2.期望元素'ArrayOfKeyValueOfanyTypeanyType'来自命名空间'http://schemas.microsoft.com/2003/10/Serialization/Arrays'..遇到'元素',名称为'ResourceDictionary ',namespace'http://schemas.microsoft.com/winfx/2006/xaml/presentation'。“ – giacoder 2012-02-07 22:28:08

+0

我想那不是可序列化的。首先将其转换为字节[]或其他内容。看看XAMLWriter – MyKuLLSKI 2012-02-07 22:50:09