diff --git a/v2rayN/v2rayN/Handler/MainFormHandler.cs b/v2rayN/v2rayN/Handler/MainFormHandler.cs index c93893bc..6c60534a 100644 --- a/v2rayN/v2rayN/Handler/MainFormHandler.cs +++ b/v2rayN/v2rayN/Handler/MainFormHandler.cs @@ -2,6 +2,9 @@ using Splat; using System.Drawing; using System.IO; +using System.Runtime.InteropServices; +using System.Windows; +using System.Windows.Interop; using System.Windows.Media.Imaging; using v2rayN.Enums; using v2rayN.Handler.CoreConfig; @@ -223,5 +226,27 @@ namespace v2rayN.Handler HotkeyHandler.Instance.HotkeyTriggerEvent += handler; HotkeyHandler.Instance.Load(); } + + public void RegisterSystemColorSet(Config config, Window window, Action update) + { + var helper = new WindowInteropHelper(window); + var hwndSource = HwndSource.FromHwnd(helper.EnsureHandle()); + hwndSource.AddHook((IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) => + { + if (config.uiItem.followSystemTheme) + { + const int WM_SETTINGCHANGE = 0x001A; + if (msg == WM_SETTINGCHANGE) + { + if (wParam == IntPtr.Zero && Marshal.PtrToStringUni(lParam) == "ImmersiveColorSet") + { + update(!Utils.IsLightTheme()); + } + } + } + + return IntPtr.Zero; + }); + } } } \ No newline at end of file diff --git a/v2rayN/v2rayN/Views/ClashProxiesView.xaml b/v2rayN/v2rayN/Views/ClashProxiesView.xaml index 05d99e6f..6b1bded3 100644 --- a/v2rayN/v2rayN/Views/ClashProxiesView.xaml +++ b/v2rayN/v2rayN/Views/ClashProxiesView.xaml @@ -19,72 +19,71 @@ - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + Style="{StaticResource ToolbarTextBlock}" + Text="{x:Static resx:ResUI.menuRulemode}" /> + + + + + + + + + + + + + + + + + - + + Margin="8" /> vm.ShowClashUI, v => v.tabClashUI.Visibility).DisposeWith(disposables); }); - RestoreUI(); - AddHelpMenuItem(); - var IsAdministrator = Utils.IsAdministrator(); this.Title = $"{Utils.GetVersion()} - {(IsAdministrator ? ResUI.RunAsAdmin : ResUI.NotRunAsAdmin)}"; @@ -152,36 +148,14 @@ namespace v2rayN.Views RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly; } - var helper = new WindowInteropHelper(this); - var hwndSource = HwndSource.FromHwnd(helper.EnsureHandle()); - hwndSource.AddHook((IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) => - { - if (_config.uiItem.followSystemTheme) - { - const int WM_SETTINGCHANGE = 0x001A; - if (msg == WM_SETTINGCHANGE) - { - if (wParam == IntPtr.Zero && Marshal.PtrToStringUni(lParam) == "ImmersiveColorSet") - { - ViewModel?.ModifyTheme(!Utils.IsLightTheme()); - } - } - } + MainFormHandler.Instance.RegisterSystemColorSet(_config, this, (bool bl) => { ViewModel?.ModifyTheme(bl); }); - return IntPtr.Zero; - }); - if (tabProfiles.Content is null) - { - tabProfiles.Content = new ProfilesView(); - } - if (tabMsgView.Content is null) - { - tabMsgView.Content = new MsgView(); - } - if (tabClashUI.Content is null) - { - tabClashUI.Content = new ClashProxiesView(); - } + tabProfiles.Content ??= new ProfilesView(); + tabMsgView.Content ??= new MsgView(); + tabClashUI.Content ??= new ClashProxiesView(); + + RestoreUI(); + AddHelpMenuItem(); } #region Event diff --git a/v2rayN/v2rayN/Views/MsgView.xaml b/v2rayN/v2rayN/Views/MsgView.xaml index 9e61d419..51e7f25a 100644 --- a/v2rayN/v2rayN/Views/MsgView.xaml +++ b/v2rayN/v2rayN/Views/MsgView.xaml @@ -10,15 +10,12 @@ d:DesignWidth="800" mc:Ignorable="d"> - - + + + - +