예제 #1
0
        /// <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);
            }
        }
예제 #2
0
 /// <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;
     }
 }