代码之家  ›  专栏  ›  技术社区  ›  Adrian K

更改ResourceDictionary不会明显影响WPF中的窗口

  •  1
  • Adrian K  · 技术社区  · 14 年前

    我有一个简单的WPF应用程序,我正在使用它进行实验。

    ResourceDictionary 元素,而不是 ResourceDictionary.MergedDictionaries 一个。

    我想让用户选择要使用的主题,所以我在代码中重置source属性-但是当调试器告诉我我已经成功设置了值时,应用程序的外观不会改变。

    编辑:这就是我如何在xaml中声明我的“风格”:

    <Window x:Class="WpfUI.winMain">
      <Window.Resources>
        <ResourceDictionary Source="Themes\Blah.xaml"></ResourceDictionary>
      </Window.Resources>
    
      // The windows grid and other controls...
    
    </Window>
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   TerrorAustralis    14 年前

    简单的答案是,您需要清除应用程序合并的资源字典。这里有一些代码让你开始

    ResourceDictionary dictionary = GetThemeResourceDictionary(yourTheme) 
    
    if (dictionary != null)
    {
         App.Current.Resources.MergedDictionaries.Clear();
         App.Current.Resources.MergedDictionaries.Add(dictionary);
    }
    
    public ResourceDictionary GetThemeResourceDictionary(string theme)
    {
        if (theme != null)
        {
            Assembly assembly = Assembly.LoadFrom("WPF.Themes.dll");
            string packUri = String.Format(YourThemeFolder/{0}.xaml", theme);
            return Application.LoadComponent(new Uri(packUri, UriKind.Relative)) as ResourceDictionary;
        }
        return null;
    }
    

    WPF themes . 它引入了一个主题管理器类和一组内置的主题,这真是难以置信。如果在安装或添加新主题时遇到任何困难,请与我联系:)