[SOLVED] WPF Window Titlebar

Issue

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?

Solution

You can take three approaches to this problem…

1: The hard one, what you are trying to do is modify the non-client area which is controlled by Windows.

The downside is this is possible only through the Windows’ kernel methods, and you’re in .NET, not C/C++. However, there is P/Invoke at our disposal. Indeed, the whole of the Windows Form UI and console application I/O methods are offered as wrappers that make system calls under the hood. Hence, as documented in MSDN, it is completely possible to use P/Invoke to access those methods that are needed to set up the non–client area.

As said prior, this is a "harder than currently necessary" solution.


2: The easier one, making your own title bar with XAML

Luckily, as of .NET 4.5, you can use the WindowChrome class to adjust the non-client area somewhat to your needs, you can set the WindowStyle to none and can add a custom title bar to your application that can have any color you like, and can look like the title bar from Windows or other OS’

To get yourself started on WindowChrome you can go to these following articles WindowChrome Class and Experiments with WindowChrome.

The basis of your code right below the <Window [...]>

<WindowChrome.WindowChrome>
        <WindowChrome 
        CaptionHeight="0"
        ResizeBorderThickness="5" />
    </WindowChrome.WindowChrome>

And make sure you add WindowStyle="None" to remove the titlebar and its components


3: The easiest one, using a third-party library.

You can also use a third-party components system like MahApps.Metro for WPF. You should be able to Customize the title bar color as far as I am aware.

The end result can look something like this:

MahApps.Metro

Answered By – SimpleCoder

Answer Checked By – Jay B. (BugsFixing Admin)

Leave a Reply

Your email address will not be published. Required fields are marked *