I have a WPF Windows application. I need to change the background color of the title bar. How can I do that?
-
Related: http://stackoverflow.com/questions/9978444/how-can-i-style-the-border-and-title-bar-of-a-window-in-wpf. – DuckMaestro Jan 20 '15 at 00:55
-
1Possible duplicate of [How can I style the border and title bar of a window in WPF?](https://stackoverflow.com/questions/9978444/how-can-i-style-the-border-and-title-bar-of-a-window-in-wpf) – StayOnTarget Jul 24 '19 at 19:16
4 Answers
In WPF the titlebar is part of the non-client area, which can't be modified through the WPF window class. You need to manipulate the Win32 handles (if I remember correctly).
This article could be helpful for you: Custom Window Chrome
-
8
-
4
-
2The link is down (again), might refer to this [link](https://learn.microsoft.com/en-us/dotnet/api/system.windows.shell.windowchrome?view=netcore-3.1) – Yeshurun Kubi Aug 11 '20 at 22:32
Here's an example on how to achieve this:
<DockPanel HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
LastChildFill="True">
<Grid DockPanel.Dock="Right"
HorizontalAlignment="Right">
<StackPanel Orientation="Horizontal"
HorizontalAlignment="Right"
VerticalAlignment="Center">
<Button x:Name="MinimizeButton"
KeyboardNavigation.IsTabStop="False"
Click="MinimizeWindow"
Style="{StaticResource MinimizeButton}"
Template="{StaticResource MinimizeButtonControlTemplate}" />
<Button x:Name="MaximizeButton"
KeyboardNavigation.IsTabStop="False"
Click="MaximizeClick"
Style="{DynamicResource MaximizeButton}"
Template="{DynamicResource MaximizeButtonControlTemplate}" />
<Button x:Name="CloseButton"
KeyboardNavigation.IsTabStop="False"
Command="{Binding ApplicationCommands.Close}"
Style="{DynamicResource CloseButton}"
Template="{DynamicResource CloseButtonControlTemplate}"/>
</StackPanel>
</Grid>
</DockPanel>
Handle Click Events in the code-behind.
For MouseDown -
App.Current.MainWindow.DragMove();
For Minimize Button -
App.Current.MainWindow.WindowState = WindowState.Minimized;
For DoubleClick and MaximizeClick
if (App.Current.MainWindow.WindowState == WindowState.Maximized)
{
App.Current.MainWindow.WindowState = WindowState.Normal;
}
else if (App.Current.MainWindow.WindowState == WindowState.Normal)
{
App.Current.MainWindow.WindowState = WindowState.Maximized;
}

- 19,551
- 15
- 98
- 146

- 843
- 1
- 10
- 13
-
3ApplicationCommands.Close did not work for me. I used Application.Current.MainWindow.Close(); in a command. Also there is no DoubleClick for Grid, I used MouseLeftButtonDown and used this. if (e.ClickCount == 2) { Maximize(); } else { Application.Current.MainWindow.DragMove(); } – Egemen Çiftci Oct 13 '17 at 06:24
-
22What does any of this code have to do with the color of the title bar that was asked for? Please explain! – user74696c Dec 04 '19 at 09:38
-
1You've got several things in there that are not complete - `Style` & `Template`. Where are these defined/declared? – IAbstract Sep 01 '21 at 15:43
-
2
You can also create a borderless window, and make the borders and title bar yourself

- 286,951
- 70
- 623
- 758
-
11But then you have to build all taskbar functionalities yourself(like moving, maximize/restore size on double click, close on double click the icon, ...). – Marcel B Aug 16 '09 at 11:59
-
yes... but it's no big deal, for instance the DragMove method makes it easy to handlo moving, and the rest is peace of cake ;) – Thomas Levesque Aug 16 '09 at 13:21
-
13i know... but building an own titlebar feels like a dirty trick to me.(besides creating the same Look&Feel is a pretty hard task imho) – Marcel B Aug 16 '09 at 14:41
-
@MarcelB: it's not a dirty trick. There is a workaround to achieve what you want that Sushant Kurana posted above. There are a couple questions I have that he could probably clarify. But it's not a dirty trick or a hack. – IAbstract Sep 01 '21 at 15:29
This project was very helpful to me in changing the background color using Window Chrome. If you want to to a ton of other custom things with the title back then maybe a borderless window is the way to go. But for just changing the color this was simple and worked great! https://www.codeproject.com/Articles/5255192/Use-WindowChrome-to-Customize-the-Title-Bar-in-WPF

- 93
- 6