C#WPF透明窗口带边框

我想制作一个透明的简单应用程序,但保留“普通”边框,关闭按钮,最小化和最大化按钮。

我知道如何使用标准使窗口透明

  

但这会删除边框和右上角的按钮。 我读了这个post,

带边框的透明窗口

哪种解决方案,但实际上,我只是希望能够保持标准边框,如果我没有使窗口透明。 我可以移动窗口,resize,关闭等等…这可能吗?

我在Microsoft.com上将基于本教程的快速TransparencyConverter类汇集在一起,您可以将其用于此目的:

 using System; using System.Runtime.InteropServices; using System.Windows; using System.Windows.Interop; namespace WpfApplication2 { class TransparencyConverter { private readonly Window _window; public TransparencyConverter(Window window) { _window = window; } public void MakeTransparent() { var mainWindowPtr = new WindowInteropHelper(_window).Handle; var mainWindowSrc = HwndSource.FromHwnd(mainWindowPtr); if (mainWindowSrc != null) if (mainWindowSrc.CompositionTarget != null) mainWindowSrc.CompositionTarget.BackgroundColor = System.Windows.Media.Color.FromArgb(0, 0, 0, 0); var margins = new Margins { cxLeftWidth = 0, cxRightWidth = Convert.ToInt32(_window.Width) * Convert.ToInt32(_window.Width), cyTopHeight = 0, cyBottomHeight = Convert.ToInt32(_window.Height) * Convert.ToInt32(_window.Height) }; if (mainWindowSrc != null) DwmExtendFrameIntoClientArea(mainWindowSrc.Handle, ref margins); } [StructLayout(LayoutKind.Sequential)] public struct Margins { public int cxLeftWidth; public int cxRightWidth; public int cyTopHeight; public int cyBottomHeight; } [DllImport("DwmApi.dll")] public static extern int DwmExtendFrameIntoClientArea(IntPtr hwnd, ref Margins pMarInset); } } 

完成此操作后,将Transparent Background属性添加到XAML并订阅Window_Loaded事件并调用MakeTransparent方法:

  private void Window_Loaded(object sender, RoutedEventArgs e) { var transparencyConverter = new TransparencyConverter(this); transparencyConverter.MakeTransparent(); } 

屏幕截图如下:

截图

我首先看一下背景颜色的rgb(a)颜色中的(a)lpha设置。 alpha设置设置对象颜色的不透明度。

虽然,我注意到,在我发布这篇文章之前,我的另一篇文章看起来更简洁,可能更适合你。