From 749a7312d7899890b2dfedf635af4b03ddb1aa44 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Tue, 3 Nov 2026 20:47:33 +0800 Subject: [PATCH] Prevent duplicate UI style injections --- .../ViewModels/ThemeSettingViewModel.cs | 65 +++++++++++++------ 1 file changed, 44 insertions(+), 21 deletions(-) diff --git a/v2rayN/v2rayN.Desktop/ViewModels/ThemeSettingViewModel.cs b/v2rayN/v2rayN.Desktop/ViewModels/ThemeSettingViewModel.cs index 5fd7f5b2..991b365c 100644 --- a/v2rayN/v2rayN.Desktop/ViewModels/ThemeSettingViewModel.cs +++ b/v2rayN/v2rayN.Desktop/ViewModels/ThemeSettingViewModel.cs @@ -7,6 +7,10 @@ namespace v2rayN.Desktop.ViewModels; public partial class ThemeSettingViewModel : MyReactiveObject { + private Style? _fontSizeStyle; + private Style? _fontSizeExStyle; + private Style? _fontFamilyStyle; + [Reactive] public partial string CurrentTheme { get; set; } [Reactive] public partial int CurrentFontSize { get; set; } @@ -34,7 +38,7 @@ public partial class ThemeSettingViewModel : MyReactiveObject CurrentFontSize = _config.UiItem.CurrentFontSize; CurrentLanguage = _config.UiItem.CurrentLanguage; - this.WhenAnyValue(x => x.CurrentTheme) + this.WhenAnyValueUnsafe(x => x.CurrentTheme) .Where(y => y.IsNotEmpty()) .SubscribeAsync(async _ => { @@ -46,7 +50,7 @@ public partial class ThemeSettingViewModel : MyReactiveObject } }); - this.WhenAnyValue(x => x.CurrentFontSize) + this.WhenAnyValueUnsafe(x => x.CurrentFontSize) .Where(y => y > 0) .SubscribeAsync(async _ => { @@ -58,7 +62,7 @@ public partial class ThemeSettingViewModel : MyReactiveObject } }); - this.WhenAnyValue(x => x.CurrentLanguage) + this.WhenAnyValueUnsafe(x => x.CurrentLanguage) .Where(y => !y.IsNullOrEmpty()) .SubscribeAsync(async _ => { @@ -75,19 +79,20 @@ public partial class ThemeSettingViewModel : MyReactiveObject private void ModifyTheme() { var app = Application.Current; - if (app is not null) + if (app is null) { - app.RequestedThemeVariant = CurrentTheme switch - { - nameof(ETheme.Dark) => ThemeVariant.Dark, - nameof(ETheme.Light) => ThemeVariant.Light, - nameof(ETheme.Aquatic) => SemiTheme.Aquatic, - nameof(ETheme.Desert) => SemiTheme.Desert, - nameof(ETheme.Dusk) => SemiTheme.Dusk, - nameof(ETheme.NightSky) => SemiTheme.NightSky, - _ => ThemeVariant.Default, - }; + return; } + app.RequestedThemeVariant = CurrentTheme switch + { + nameof(ETheme.Dark) => ThemeVariant.Dark, + nameof(ETheme.Light) => ThemeVariant.Light, + nameof(ETheme.Aquatic) => SemiTheme.Aquatic, + nameof(ETheme.Desert) => SemiTheme.Desert, + nameof(ETheme.Dusk) => SemiTheme.Dusk, + nameof(ETheme.NightSky) => SemiTheme.NightSky, + _ => ThemeVariant.Default, + }; } private void ModifyFontSize() @@ -98,7 +103,7 @@ public partial class ThemeSettingViewModel : MyReactiveObject return; } - Style style = new(x => Selectors.Or( + var style = new Style(x => Selectors.Or( x.OfType