我有2个资源字典资产/ Orange / Core.xaml和Assets / Gray / Core.xaml。我想动态加载它们。字典包含隐式和显式样式。我已经尝试过更改资源字典的标准代码。代码: -
Uri uri = new Uri("/FMT.Client;component/Assets/Orange/Core.xaml", UriKind.Relative);
StreamResourceInfo info = Application.GetResourceStream(uri);
if (info != null)
{
StreamReader reader = new StreamReader(info.Stream);
ResourceDictionary currentDict = XamlReader.Load(reader.ReadToEnd()) as ResourceDictionary;
reader.Close();
if (currentDict != null)
{
Application.Current.Resources.MergedDictionaries.RemoveAt(Application.Current.Resources.MergedDictionaries.Count - 1);
Application.Current.Resources.MergedDictionaries.Add(currentDict);
}
}
我不知道为什么我的主题没有改变。我真的很厌倦,觉得我的头撞在墙上。首先,我将此代码放在特定页面上。但它并没有像预期的那样成功。然后我读了一些线程,这是另一个SL4的限制,我们需要在页面加载之前放置代码。读这个我把这个代码放在构造函数中的App.xaml.cs中,就在InitializeComponent()行之后,但它仍然不起作用。我还能做什么?我花了将近3个小时来讨论这个愚蠢无用的问题。现在我无法忍受。行Application.Current.Resources.MergedDictionaries.Add(currentDict);
确实已执行但未见主题更改。
答案 0 :(得分:2)
看起来您可能需要首先清除您的ResourceDictionary但我并不积极。但是,我确实找到了一个模拟如何做到这一点的网站。如果有效,请告诉我:
答案 1 :(得分:1)
原始代码可能正在清除合并的词典 - 假设只合并了1个词典。我无法从代码片段中分辨出来。
BiggsTRC为您提供了一个很好的例子。
我相信您缺少的那个难题是您需要重置所有静态资源。删除旧的合并字典并添加新字典不会更新StaticResource声明。注意样本的ResetStyles方法。你可能需要这样的东西。