From 01c41422f8bdb727770ed930d468198c3997f508 Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Sun, 30 May 2021 17:46:41 +0800 Subject: [PATCH] fixed .net 4.0 compile problem --- .../HandyControl_Shared/Themes/Theme.cs | 22 ++++++++++--------- .../Tools/Interop/InteropMethods.cs | 4 ++++ .../Tools/Interop/InteropValues.cs | 3 ++- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/Shared/HandyControl_Shared/Themes/Theme.cs b/src/Shared/HandyControl_Shared/Themes/Theme.cs index 0ed0a1c1..756eebda 100644 --- a/src/Shared/HandyControl_Shared/Themes/Theme.cs +++ b/src/Shared/HandyControl_Shared/Themes/Theme.cs @@ -5,6 +5,7 @@ using System.Windows.Media; using HandyControl.Data; using HandyControl.Tools; using HandyControl.Tools.Helper; +using HandyControl.Tools.Interop; using Microsoft.Win32; namespace HandyControl.Themes @@ -191,25 +192,26 @@ namespace HandyControl.Themes { if (AccentColor != null) { - _precSkin[ResourceToken.PrimaryColor] = AccentColor; - _precSkin[ResourceToken.DarkPrimaryColor] = AccentColor; - _precSkin[ResourceToken.TitleColor] = AccentColor; - _precSkin[ResourceToken.SecondaryTitleColor] = AccentColor; + UpdateAccentColor(AccentColor.Value); } } else { - var windowGlassColor = ((SolidColorBrush) SystemParameters.WindowGlassBrush).Color; - - _precSkin[ResourceToken.PrimaryColor] = windowGlassColor; - _precSkin[ResourceToken.DarkPrimaryColor] = windowGlassColor; - _precSkin[ResourceToken.TitleColor] = windowGlassColor; - _precSkin[ResourceToken.SecondaryTitleColor] = windowGlassColor; + InteropMethods.DwmGetColorizationColor(out var color, out _); + UpdateAccentColor(ColorHelper.ToColor(color)); } return _precSkin; } + private void UpdateAccentColor(Color color) + { + _precSkin[ResourceToken.PrimaryColor] = color; + _precSkin[ResourceToken.DarkPrimaryColor] = color; + _precSkin[ResourceToken.TitleColor] = color; + _precSkin[ResourceToken.SecondaryTitleColor] = color; + } + private void UpdateSkin() => MergedDictionaries[0] = GetSkin(Skin); public virtual ResourceDictionary GetTheme() => ResourceHelper.GetTheme(); diff --git a/src/Shared/HandyControl_Shared/Tools/Interop/InteropMethods.cs b/src/Shared/HandyControl_Shared/Tools/Interop/InteropMethods.cs index 41fcb946..f3d5ae92 100644 --- a/src/Shared/HandyControl_Shared/Tools/Interop/InteropMethods.cs +++ b/src/Shared/HandyControl_Shared/Tools/Interop/InteropMethods.cs @@ -480,6 +480,10 @@ namespace HandyControl.Tools.Interop [DllImport(InteropValues.ExternDll.Shell32, CallingConvention = CallingConvention.StdCall)] internal static extern uint SHAppBarMessage(int dwMessage, ref InteropValues.APPBARDATA pData); + [SecurityCritical] + [DllImport(InteropValues.ExternDll.DwmApi, EntryPoint = "DwmGetColorizationColor", PreserveSig = true)] + internal static extern int DwmGetColorizationColor(out uint pcrColorization, out bool pfOpaqueBlend); + #endregion internal class Gdip diff --git a/src/Shared/HandyControl_Shared/Tools/Interop/InteropValues.cs b/src/Shared/HandyControl_Shared/Tools/Interop/InteropValues.cs index 94fe3437..323c1d0f 100644 --- a/src/Shared/HandyControl_Shared/Tools/Interop/InteropValues.cs +++ b/src/Shared/HandyControl_Shared/Tools/Interop/InteropValues.cs @@ -18,7 +18,8 @@ namespace HandyControl.Tools.Interop Kernel32 = "kernel32.dll", Shell32 = "shell32.dll", MsImg = "msimg32.dll", - NTdll = "ntdll.dll"; + NTdll = "ntdll.dll", + DwmApi = "dwmapi.dll"; } internal delegate IntPtr HookProc(int code, IntPtr wParam, IntPtr lParam);