Как правильно сохранить тему программы?
Хочу реализовать смену темы программы и её сохранения. При выходе из программы загружается тема которую сохранили. При выборе темы , тема меняется, но не сохраняется ( Что необходимо исправить ?
Обозреватель проекта
App.xaml
<Application x:Class="ConvertToImage.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ConvertToImage"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Styles\DarkTheme.xaml"/>
<ResourceDictionary Source="Styles\LightTheme.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
App.xaml.cs
using System.Windows;
using ConvertToImage.Properties;
namespace ConvertToImage
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
private void Application_Startup(object sender, StartupEventArgs e)
{
string savedTheme = Settings.Default.ThemeName;
ApplyTheme(savedTheme);
}
public static void ApplyTheme(string theme)
{
ResourceDictionary resourceDict = new ();
switch (theme)
{
case "Dark":
resourceDict.Source = new Uri("/Styles/DarkTheme.xaml", UriKind.Relative);
break;
case "Light":
resourceDict.Source = new Uri("/Styles/LightTheme.xaml", UriKind.Relative);
break;
}
Application.Current.Resources.MergedDictionaries.Clear();
Application.Current.Resources.MergedDictionaries.Add(resourceDict);
}
}
}
Файл Settings.Designer.cs
//------------------------------------------------------------------------------
// <auto-generated>
// Этот код создан программой.
// Исполняемая версия:4.0.30319.42000
//
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
// повторной генерации кода.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ConvertToImage.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.10.0.0")]
public partial class Settings : global::System.Configuration.ApplicationSettingsBase {
public static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string ThemeName {
get {
return ((string)(this["ThemeName"]));
}
set {
this["ThemeName"] = value;
}
}
}
}
Страница с кнопкой
<Grid Style="{DynamicResource GridBackgroundBrush}">
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<Button Width="200" Height="30" Content="Светлый"
x:Name="LinghtBtn" Click="Test_Click" />
<Button Width="200" x:Name="DartBtn" Content="Тёмный"
Height="30" Click="Test_Click" />
</StackPanel>
</Grid>
Переключение темы
private void Test_Click(object sender, RoutedEventArgs e)
{
Button clickedButton = sender as Button;
if (clickedButton != null)
{
string selectedTheme = clickedButton.Name == "LinghtBtn" ? "Light" : "Dark";
Properties.Settings.Default.ThemeName = selectedTheme;
Properties.Settings.Default.Save();
App.ApplyTheme(selectedTheme);
}
}
Ожидал смену темы и её сохранение, не сохраняется тема.
Ответы (1 шт):
Автор решения: Naik
→ Ссылка
Изменил app.xaml
<Application x:Class="ConvertToImage.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ConvertToImage"
Startup="Application_Startup"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Styles\DarkTheme.xaml"/>
<ResourceDictionary Source="Styles\LightTheme.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>