C# WPF transparent window with a border
I threw together a quick TransparencyConverter
class based on this tutorial on Microsoft.com you can use for this purpose:
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); }}
Once you have this in, add the Transparent Background attribute to your XAML and subscribe to the Window_Loaded event and call the MakeTransparent method:
<Window etc etc Background="Transparent" Loaded="Window_Loaded">private void Window_Loaded(object sender, RoutedEventArgs e){ var transparencyConverter = new TransparencyConverter(this); transparencyConverter.MakeTransparent();}
A screenshot is below:
I would first look at the (a)lpha setting in the rgb(a) color of the background color.The alpha setting sets the opacity of the object color.
Although, I notice that as I'm posting this, there is another post before mine that looks more concise and would probably be more appropriate for you.