我有一个带主题的WPF应用程序(ShinyRed.xaml),我希望有一个按钮,点击后将主题更改为ShinyBlue.xaml
我最初在App.xaml中加载主题:
<Application.Resources>
<ResourceDictionary Source="/Themes/ShinyBlue.xaml"/>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?
H.B*_*.B. 33
你怎么做的:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary x:Name="ThemeDictionary">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Themes/ShinyRed.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
<!-- ... -->
Run Code Online (Sandbox Code Playgroud)
public partial class App : Application
{
public ResourceDictionary ThemeDictionary
{
// You could probably get it via its name with some query logic as well.
get { return Resources.MergedDictionaries[0]; }
}
public void ChangeTheme(Uri uri)
{
ThemeDictionary.MergedDictionaries.Clear();
ThemeDictionary.MergedDictionaries.Add(new ResourceDictionary() { Source = uri });
}
//...
}
Run Code Online (Sandbox Code Playgroud)
在您的更改方法中:
var app = (App)Application.Current;
app.ChangeTheme(new Uri("New Uri here"));
Run Code Online (Sandbox Code Playgroud)
这篇文章将引导您完成它:
http://svetoslavsavov.blogspot.com/2009/07/switching-wpf-interface-themes-at.html
基本上你需要从资源字典中删除"旧"主题,然后合并到新的主题.上面的文章向您展示了如何使这一变化变得非常简单.
我使用以下命令在运行时设置主题:
Application.Current.Resources.Source = new Uri("/Themes/ShinyRed.xaml", UriKind.RelativeOrAbsolute);
Run Code Online (Sandbox Code Playgroud)
应用程序.xaml
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Themes/Font.xaml" />
<ResourceDictionary Source="Themes/Light.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
在您的代码中:
> Application.Current.Resources.MergedDictionaries[1].Source = new Uri("Themes/Dark.xaml", UriKind.RelativeOrAbsolute);
Run Code Online (Sandbox Code Playgroud)
你可以检查这个以确保没有任何增长
Application.Current.Resources.MergedDictionaries.Count.ToString();
| 归档时间: |
|
| 查看次数: |
28955 次 |
| 最近记录: |