WPF 几行代码实现窗体毛玻璃效果(Aero Glass)

来源:互联网 发布:linux自定义命令 编辑:程序博客网 时间:2024/05/20 17:40

创建一个叫AeroGlass.cs 的类,代码如下:

using System;using System.Runtime.InteropServices;using System.Windows;using System.Windows.Interop;using System.Windows.Media;[StructLayout(LayoutKind.Sequential)]public struct MARGINS{    public MARGINS(Thickness t)    {        Left = (int)t.Left;        Right = (int)t.Right;        Top = (int)t.Top;        Bottom = (int)t.Bottom;    }    public int Left;    public int Right;    public int Top;    public int Bottom;}public class GlassHelper{    [DllImport("dwmapi.dll", PreserveSig = false)]    static extern void DwmExtendFrameIntoClientArea(        IntPtr hWnd, ref MARGINS pMarInset);    [DllImport("dwmapi.dll", PreserveSig = false)]        static extern bool DwmIsCompositionEnabled();    public static bool ExtendGlassFrame(Window window, Thickness margin)    {        if (!DwmIsCompositionEnabled())            return false;        IntPtr hwnd = new WindowInteropHelper(window).Handle;        if (hwnd == IntPtr.Zero)            throw new InvalidOperationException(            "The Window must be shown before extending glass.");        // Set the background to transparent from both the WPF and Win32 perspectives        window.Background = Brushes.Transparent;        HwndSource.FromHwnd(hwnd).CompositionTarget.BackgroundColor = Colors.Transparent;        MARGINS margins = new MARGINS(margin);        DwmExtendFrameIntoClientArea(hwnd, ref margins);        return true;    }}

把这段代码加到主窗体就可以了!

 protected override void OnSourceInitialized(EventArgs e)
        {
            base.OnSourceInitialized(e);
            GlassHelper.ExtendGlassFrame(this, new Thickness(-1));
        }


完整代码下载:http://www.dengfengsoft.com/docs/AeroGlass.zip