57

I have a WPF Windows application. I need to change the background color of the title bar. How can I do that?

2

4 Answers 4

30

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

Sign up to request clarification or add additional context in comments.

3 Comments

The link to Custom Window Chrome in WPF is dead now
@LyleS. the link just works fine, maybe it was down for a moment.
The link is down (again), might refer to this link
26

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; } 

4 Comments

ApplicationCommands.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(); }
What does any of this code have to do with the color of the title bar that was asked for? Please explain!
You've got several things in there that are not complete - Style & Template. Where are these defined/declared?
Answer is unusable as it is.
16

You can also create a borderless window, and make the borders and title bar yourself

4 Comments

But then you have to build all taskbar functionalities yourself(like moving, maximize/restore size on double click, close on double click the icon, ...).
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 ;)
i 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)
@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.
2

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

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.