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

本文关键字:真的 外观 更新 资源 我的 字典 为什么 | 更新日期: 2023-09-27 17:55:57

我有 2 个资源字典 assets/Orange/Core.xaml 和 Assets/Grey/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);确实执行了,但看不到主题的变化。

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

看起来您可能需要先清除资源字典,但我并不肯定。 但是,我确实找到了一个模拟如何做到这一点的网站。 让我知道这是否有效:

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

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

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

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