internal static void SetBlur(Window win, AcrylicAccentState state, AccentFlagsType style = AccentFlagsType.Window) { var windowHelper = new WindowInteropHelper(win); var value = AcrylicHelper.SelectAccentState(state); AcrylicHelper.SetBlur(windowHelper.Handle, style, value); }
internal static AccentState SelectAccentState(AcrylicAccentState state = AcrylicAccentState.Default) { // ウィンドウのアクリル効果を設定する AccentState value = state switch { // ウィンドウ背景のぼかしを行うのはWindows10の場合のみ // OSのバージョンに従い、AccentStateを切り替える AcrylicAccentState.Default => SystemInfo.Version.Value switch { // Windows11環境ではアクリル効果を無効にする var version when version >= VersionInfos.Windows11_Preview => AccentState.ACCENT_ENABLE_GRADIENT, // Windows10 1903以降では、ACCENT_ENABLE_ACRYLICBLURBEHINDを用いると、ウィンドウのドラッグ移動などでマウス操作に追従しなくなる。 // ウィンドウの移動/リサイズ中だけ、ACCENT_ENABLE_ACRYLICBLURBEHINDを無効にして、この問題を回避する //var version when version >= VersionInfos.Windows10_1903 => AccentState.ACCENT_ENABLE_BLURBEHIND, var version when version >= VersionInfos.Windows10_1809 => AccentState.ACCENT_ENABLE_ACRYLICBLURBEHIND, var version when version >= VersionInfos.Windows10 => AccentState.ACCENT_ENABLE_BLURBEHIND, _ => AccentState.ACCENT_ENABLE_TRANSPARENTGRADIENT, },
public static void SetAcrylicAccentState(DependencyObject obj, AcrylicAccentState value) { obj.SetValue(AcrylicAccentStateProperty, value); }