/// <summary> /// 自动应用Win10全局主题设置(true 为应用成功) /// </summary> public bool AutoSyncThemeSetting() { try { Theme expectedTheme; if (GetWindows10AppsLightThemeSetting() == "1") // 是否使用亮色主题(Win10) { TitleBarColorOpacity = LightTitleBarColorOpacity; // 标题栏颜色 Win8ColorOpacity = LightWin8ColorOpacity; // Win8颜色(轻微透明) BlurColorOpacity = LightBlurColorOpacity; // 模糊颜色(透明) BlurColorNonOpacity = LightBlurColorNonOpacity; // 模糊颜色(不透明) //NoiseEffectObject.IsLight = true; // 设置材质颜色 expectedTheme = ThemeManager.GetTheme("Light.Blue"); if ((HwndSource)PresentationSource.FromVisual(this) != null) { BlurEffect.GeneralDarkSwitcher(this, false); } } else { TitleBarColorOpacity = DarkTitleBarColorOpacity; // 标题栏颜色 Win8ColorOpacity = DarkWin8ColorOpacity; // Win8颜色(轻微透明) BlurColorOpacity = DarkBlurColorOpacity; // 模糊颜色(透明) BlurColorNonOpacity = DarkBlurColorNonOpacity; // 模糊颜色(不透明) //NoiseEffectObject.IsLight = false; // 设置材质颜色 expectedTheme = ThemeManager.GetTheme("Dark.Blue"); if ((HwndSource)PresentationSource.FromVisual(this) != null) { BlurEffect.GeneralDarkSwitcher(this, true); } } TransparentColor = System.Windows.Media.Color.FromArgb(0, BlurColorNonOpacity.R, BlurColorNonOpacity.G, BlurColorNonOpacity.B); TitleBarColor.Background = new SolidColorBrush(TitleBarColorOpacity); // 设置标题栏颜色 ThemeManager.ChangeTheme(Application.Current, expectedTheme); return(true); } catch { return(false); } }
/// <summary> /// 模糊切换器(调用模糊类,主要为了给窗口透明度进行调整,否则不好看) /// </summary> /// <param name="visual">需要应用效果的窗口</param> /// <param name="switcher">true为开启模,false为关闭</param> public void BlurSwitcher(Visual visual, bool switcher, int animation_time = -1) { if (animation_time < 0) // 如果未指定时间,则使用默认值 { if (Environment.OSVersion.Version.Build >= 22000) { animation_time = Win11BlurAnimationTime; } else { animation_time = BlurAnimationTime; } } BlurEffect.GeneralDarkSwitcher(visual, GetWindows10AppsLightThemeSetting() == "1" ? false : true); if (switcher == true) { //BlurEffectV2.SetIsEnabled(this, true); if (GetWindows10TransparencySetting() == "1") // 如果Win10设置开启模糊则开启模糊 { BlurEffect.GeneralBlurSwitcher(visual, true); //BlurEffect.GeneralBlurSwitcher(window, true); //BlurRectangle.Opacity = BlurOpacity; //BlurRectangle.Fill = new SolidColorBrush(BlurColorOpacity); BGOpacityAnimation(true, animation_time); } else { BlurRectangle.Fill = new SolidColorBrush(BlurColorNonOpacity); // 禁用模糊直接不透明,不使用动画 } // 模糊时选择性使用材质 if (Environment.OSVersion.Version.Major > 6) // 是否为Win7以上 { NoiseRectangle.Opacity = NoiseEffectRatio; // 设置材质强度 //NoiseEffectObject.Ratio = NoiseEffectRatio; // 设置材质强度 if (Environment.OSVersion.Version.Build >= 22000) // 只在Win11及以上系统采用Mica无需亚克力材质 { NoiseRectangle.Opacity = 0; // 关闭材质 } else if (Environment.OSVersion.Version.Build >= 17134) // 只在1803及以上Win10系统采用亚克力材质 { if (GetWindows10TransparencySetting() == "1") // 如果Win10设置开启模糊则使用亚克力材质 { NoiseRectangle.Opacity = NoiseEffectRatio; // 设置材质强度 //NoiseEffectObject.Ratio = NoiseEffectRatio; // 设置材质强度 } else { NoiseRectangle.Opacity = 0; // 关闭材质 //NoiseEffectObject.Ratio = 0; // 关闭材质 } } else { NoiseRectangle.Opacity = NoiseEffectRatio; // 设置材质强度 //NoiseEffectObject.Ratio = 0; // 关闭材质 //NoiseEffectObject.Ratio = NoiseEffectRatio / 2; // 设置材质强度(更弱的) } } LastBlurBool = true; } else { //BlurRectangle.Opacity = 1; //BlurRectangle.Fill = new SolidColorBrush(BlurColorNonOpacity); // 最大化时禁用模糊(因为超出工作区所以需要彻底禁用保持美观),普通模式下不禁用模糊(因为切换模糊时会变一下半透明) if (WindowState == WindowState.Maximized) { //BlurRectangle.Fill = new SolidColorBrush(BlurColorNonOpacity); // 最大化直接不透明,不使用动画,此处不能这样操作,因为系统主题颜色变换需要刷新 BGOpacityAnimation(false, 0); // 最大化直接不透明,不使用动画 //Thread.Sleep(1000); BlurEffect.GeneralBlurSwitcher(visual, false); } else { if (GetWindows10TransparencySetting() == "0") // 如果Win10设置关闭模糊则彻底关闭模糊 { //BlurRectangle.Fill = new SolidColorBrush(BlurColorNonOpacity); // 禁用模糊直接不透明,不使用动画,此处不能这样操作,因为系统主题颜色变换需要刷新 BGOpacityAnimation(false, 0); // 禁用模糊直接不透明,不使用动画 BlurEffect.GeneralBlurSwitcher(visual, false); } else { BGOpacityAnimation(false, animation_time); // 普通情况下使用动画(Win11是系统接管的效果,所以不需要处理) } } //NoiseEffectObject.Ratio = 0; // 关闭模糊时关闭材质 LastBlurBool = false; } }