【问题标题】:ResourceDictionary replacement from code从代码替换 ResourceDictionary
【发布时间】:2012-02-07 13:31:42
【问题描述】:

我需要从网上下载 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 是什么?你有什么建议?

标签: windows-phone-7 resourcedictionary


【解决方案1】:

首先你应该使用我找到的通用隔离存储实用程序here

然后执行以下操作:

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多