Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WPF Window Titlebar

Tags:

c#

wpf

darkmode

dwm

I've looked in this article about getting "dark mode" titlebar in winforms WinForms Dark title bar on Windows 10

its obvious you can get the window handle like this (In WPF) instead of using this.Handle

IntPtr hWnd = new WindowInteropHelper(GetWindow(this)).EnsureHandle();

So it works

Click here to see image (I don't have rep yet)

But I was wondering if I could do this with any color..

Windows 10 and 11 have a setting to turn on any titlebar color in settings, but I was wondering if I could get the hWnd and do this myself per application, since I can turn it to black, why not any other color?

like image 386
hexeditor Avatar asked May 01 '26 20:05

hexeditor


1 Answers

People have been wanting to see how I got this to work

Put this under your class

[DllImport("DwmApi")] 
private static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, int[] attrValue, int attrSize);
const int DWWMA_CAPTION_COLOR = 35;


in whatever function (main?)

get the window handle or hwnd like this

IntPtr hWnd = new WindowInteropHelper(this).EnsureHandle();

then define the color

int[] colorstr = new int[]{0xFF00FF};

the 0x string thing is formatted like this 0xRRGGBB replace the letters to their corresponding values

then make it happen

DwmSetWindowAttribute(hWnd, DWWMA_CAPTION_COLOR, colorstr, 4);

note: this only works in windows 11


here is the complete version if your lazy

class MainWindow : Window
{

     [DllImport("DwmApi")] 
     private static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, int[] attrValue, int attrSize);
     const int DWWMA_CAPTION_COLOR = 35;

     public MainWindow()
     {
          IntPtr hWnd = new WindowInteropHelper(this).EnsureHandle();
          int[] colorstr = new int[]{0xFF00FF};
          DwmSetWindowAttribute(hWnd, DWWMA_CAPTION_COLOR, colorstr, 4);
     }

}

oh yes and import these

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Input;
using System.Windows.Interop;
using System.Windows.Media;

Edit: the color goes in the BGR format, so make sure it goes blue, green, red and not red, green blue

like image 69
hexeditor Avatar answered May 04 '26 11:05

hexeditor



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!