This is complete working code based on Wieser Software Ltd’s 2nd solution.
public partial class MainView : Window
{
public MainView()
{
InitializeComponent();
//ensure win32 handle is created
var handle = new WindowInteropHelper(this).EnsureHandle();
//set window background
var result = SetClassLong(handle, GCL_HBRBACKGROUND, GetSysColorBrush(COLOR_WINDOW));
}
public static IntPtr SetClassLong(IntPtr hWnd, int nIndex, IntPtr dwNewLong)
{
//check for x64
if (IntPtr.Size > 4)
return SetClassLongPtr64(hWnd, nIndex, dwNewLong);
else
return new IntPtr(SetClassLongPtr32(hWnd, nIndex, unchecked((uint)dwNewLong.ToInt32())));
}
private const int GCL_HBRBACKGROUND = -10;
private const int COLOR_WINDOW = 5;
[DllImport("user32.dll", EntryPoint = "SetClassLong")]
public static extern uint SetClassLongPtr32(IntPtr hWnd, int nIndex, uint dwNewLong);
[DllImport("user32.dll", EntryPoint = "SetClassLongPtr")]
public static extern IntPtr SetClassLongPtr64(IntPtr hWnd, int nIndex, IntPtr dwNewLong);
[DllImport("user32.dll")]
static extern IntPtr GetSysColorBrush(int nIndex);
}