private void EnableBlur() { var windowHelper = new WindowInteropHelper(this); var accent = new User32.AccentPolicy { AccentState = User32.AccentState.ACCENT_ENABLE_BLURBEHIND }; var accentStructSize = Marshal.SizeOf(accent); var accentPtr = Marshal.AllocHGlobal(accentStructSize); Marshal.StructureToPtr(accent, accentPtr, false); var data = new User32.WindowCompositionAttributeData { Attribute = User32.WindowCompositionAttribute.WCA_ACCENT_POLICY, SizeOfData = accentStructSize, Data = accentPtr }; User32.SetWindowCompositionAttribute(windowHelper.Handle, ref data); Marshal.FreeHGlobal(accentPtr); }
public static void ApplyBlur(Window window) { var accent = new User32.AccentPolicy { AccentState = User32.AccentState.EnableBlurBehind, AccentFlags = 2 }; var accentPtr = IntPtr.Zero; var accentSize = Marshal.SizeOf(accent); try { accentPtr = Marshal.AllocHGlobal(accentSize); Marshal.StructureToPtr(accent, accentPtr, false); var wcaData = new User32.WindowCompositionAttributeData { Attribute = User32.WindowCompositionAttribute.AccentPolicy, SizeOfData = accentSize, Data = accentPtr, }; User32.SetWindowCompositionAttribute(new WindowInteropHelper(window).Handle, ref wcaData); } finally { if (accentPtr != IntPtr.Zero) { Marshal.FreeHGlobal(accentPtr); } } }