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
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:
Answered By – SimpleCoder
Answer Checked By – Jay B. (BugsFixing Admin)