diff --git a/v2rayN/v2rayN.Desktop/ViewModels/ThemeSettingViewModel.cs b/v2rayN/v2rayN.Desktop/ViewModels/ThemeSettingViewModel.cs index 6b22f580..c3c664a3 100644 --- a/v2rayN/v2rayN.Desktop/ViewModels/ThemeSettingViewModel.cs +++ b/v2rayN/v2rayN.Desktop/ViewModels/ThemeSettingViewModel.cs @@ -13,6 +13,7 @@ namespace v2rayN.Desktop.ViewModels public class ThemeSettingViewModel : MyReactiveObject { [Reactive] public bool ColorModeDark { get; set; } + [Reactive] public bool FollowSystemTheme { get; set; } [Reactive] public int CurrentFontSize { get; set; } @@ -28,13 +29,14 @@ namespace v2rayN.Desktop.ViewModels private void RestoreUI() { - ModifyTheme(_config.UiItem.ColorModeDark); + ModifyTheme(); ModifyFontFamily(); } private void BindingUI() { ColorModeDark = _config.UiItem.ColorModeDark; + FollowSystemTheme = _config.UiItem.FollowSystemTheme; CurrentFontSize = _config.UiItem.CurrentFontSize; CurrentLanguage = _config.UiItem.CurrentLanguage; @@ -44,7 +46,18 @@ namespace v2rayN.Desktop.ViewModels if (_config.UiItem.ColorModeDark != ColorModeDark) { _config.UiItem.ColorModeDark = ColorModeDark; - ModifyTheme(ColorModeDark); + ModifyTheme(); + ConfigHandler.SaveConfig(_config); + } + }); + this.WhenAnyValue(x => x.FollowSystemTheme, + y => y == true) + .Subscribe(c => + { + if (_config.UiItem.FollowSystemTheme != FollowSystemTheme) + { + _config.UiItem.FollowSystemTheme = FollowSystemTheme; + ModifyTheme(); ConfigHandler.SaveConfig(_config); } }); @@ -59,7 +72,6 @@ namespace v2rayN.Desktop.ViewModels _config.UiItem.CurrentFontSize = CurrentFontSize; double size = CurrentFontSize; ModifyFontSize(size); - ConfigHandler.SaveConfig(_config); } }); @@ -79,12 +91,12 @@ namespace v2rayN.Desktop.ViewModels }); } - private void ModifyTheme(bool isDarkTheme) + private void ModifyTheme() { var app = Application.Current; if (app is not null) { - app.RequestedThemeVariant = isDarkTheme ? ThemeVariant.Dark : ThemeVariant.Light; + app.RequestedThemeVariant = FollowSystemTheme ? ThemeVariant.Default : (ColorModeDark ? ThemeVariant.Dark : ThemeVariant.Light); } } diff --git a/v2rayN/v2rayN.Desktop/Views/ThemeSettingView.axaml b/v2rayN/v2rayN.Desktop/Views/ThemeSettingView.axaml index f898a1df..61c4a778 100644 --- a/v2rayN/v2rayN.Desktop/Views/ThemeSettingView.axaml +++ b/v2rayN/v2rayN.Desktop/Views/ThemeSettingView.axaml @@ -33,7 +33,14 @@ Text="{x:Static resx:ResUI.TbSettingsColorMode}" /> - + + + + { this.Bind(ViewModel, vm => vm.ColorModeDark, v => v.togDarkMode.IsChecked).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.FollowSystemTheme, v => v.togFollowSystemTheme.IsChecked).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.CurrentFontSize, v => v.cmbCurrentFontSize.SelectedValue).DisposeWith(disposables); this.Bind(ViewModel, vm => vm.CurrentLanguage, v => v.cmbCurrentLanguage.SelectedValue).DisposeWith(disposables); });