Test

Test


[code] //Original source: https://github.com/sourcechord/FluentWPF


using System;

using System.Collections.Generic;

using System.Linq;

using System.Runtime.InteropServices;

using System.Text;

using System.Threading.Tasks;


namespace NetCoreWpf

{

  internal enum AccentFlagsType

  {

    Window = 0,

    Popup,

  }


  [StructLayout(LayoutKind.Sequential)]

  internal struct WindowCompositionAttributeData

  {

    public WindowCompositionAttribute Attribute;

    public IntPtr Data;

    public int SizeOfData;

  }


  internal enum WindowCompositionAttribute

  {

    // ...

    WCA_ACCENT_POLICY = 19

    // ...

  }


  internal enum AccentState

  {

    ACCENT_DISABLED = 0,

    ACCENT_ENABLE_GRADIENT = 1,

    ACCENT_ENABLE_TRANSPARENTGRADIENT = 2,

    ACCENT_ENABLE_BLURBEHIND = 3,

    ACCENT_ENABLE_ACRYLICBLURBEHIND = 4,

    ACCENT_INVALID_STATE = 5

  }


  [StructLayout(LayoutKind.Sequential)]

  internal struct AccentPolicy

  {

    public AccentState AccentState;

    public int AccentFlags;

    public uint GradientColor;

    public int AnimationId;

  }


  internal static class AcrylicWindow

  {

    [DllImport("user32.dll")]

    internal static extern int SetWindowCompositionAttribute(IntPtr hwnd, ref WindowCompositionAttributeData data);


    internal static void EnableBlur(IntPtr hwnd, uint color, AccentFlagsType style = AccentFlagsType.Window)

    {

      var accent = new AccentPolicy();

      var accentStructSize = Marshal.SizeOf(accent);

      if (style == AccentFlagsType.Window)

      {

        accent.AccentFlags = 2;

      }

      else

      {

        accent.AccentFlags = 0x20 | 0x40 | 0x80 | 0x100;

      }


      accent.GradientColor = color;

       

      var accentPtr = Marshal.AllocHGlobal(accentStructSize);

      Marshal.StructureToPtr(accent, accentPtr, false);


      var data = new WindowCompositionAttributeData();

      data.Attribute = WindowCompositionAttribute.WCA_ACCENT_POLICY;

      data.SizeOfData = accentStructSize;

      data.Data = accentPtr;


      SetWindowCompositionAttribute(hwnd, ref data);


      Marshal.FreeHGlobal(accentPtr);

    }

  }

}

[/code]

Report Page