private static void SetInternal(IntPtr handle, User32.AccentState accentState, bool showBorders = false, uint tintOpacity = 0) { var accent = new User32.AccentPolicy { AccentState = accentState, AccentFlags = (showBorders) ? User32.AccentFlags.DrawAllBorders : User32.AccentFlags.None, GradientColor = (_defaultTintOpacity << 24) | (_defaultTintBackgroundColor & 0xFFFFFF) }; var accentStructSize = Marshal.SizeOf(accent); var accentPtr = Marshal.AllocHGlobal(accentStructSize); Marshal.StructureToPtr(accent, accentPtr, false); var data = new User32.WindowCompositionAttribData(); data.Attribute = User32.WindowCompositionAttribute.WCA_ACCENT_POLICY; data.SizeOfData = accentStructSize; data.Data = accentPtr; var ret = User32.SetWindowCompositionAttribute(handle, ref data); Debug.Assert(ret == 0 || ret == 1); Marshal.FreeHGlobal(accentPtr); }
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); } } }
private static void SetAccentPolicy(IntPtr handle, User32.AccentPolicy policy) { var accentStructSize = Marshal.SizeOf(policy); var accentPtr = Marshal.AllocHGlobal(accentStructSize); Marshal.StructureToPtr(policy, accentPtr, false); var data = new User32.WindowCompositionAttribData(); data.Attribute = User32.WindowCompositionAttribute.WCA_ACCENT_POLICY; data.SizeOfData = accentStructSize; data.Data = accentPtr; var ret = User32.SetWindowCompositionAttribute(handle, ref data); Debug.Assert(ret == 0 || ret == 1); Marshal.FreeHGlobal(accentPtr); }