为什么我的资源字典没有更新外观?真的厌倦了

时间:2011-05-08 04:30:32

标签: c# silverlight silverlight-4.0

我有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);确实已执行但未见主题更改。

2 个答案:

答案 0 :(得分:2)

看起来您可能需要首先清除您的ResourceDictionary但我并不积极。但是,我确实找到了一个模拟如何做到这一点的网站。如果有效,请告诉我:

http://silverlightips.net/tag/runtime-resourcedictionary/

答案 1 :(得分:1)

原始代码可能正在清除合并的词典 - 假设只合并了1个词典。我无法从代码片段中分辨出来。

BiggsTRC为您提供了一个很好的例子。

我相信您缺少的那个难题是您需要重置所有静态资源。删除旧的合并字典并添加新字典不会更新StaticResource声明。注意样本的ResetStyles方法。你可能需要这样的东西。

相关问题