56

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

bluish
  • 26,356
  • 27
  • 122
  • 180
Emad Gabriel
  • 3,677
  • 7
  • 37
  • 49
  • 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
  • 1
    Possible 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 Answers4

29

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

greybeard
  • 2,249
  • 8
  • 30
  • 66
Marcel B
  • 3,624
  • 2
  • 27
  • 39
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;
}
IAbstract
  • 19,551
  • 15
  • 98
  • 146
Sushant Khurana
  • 843
  • 1
  • 10
  • 13
  • 3
    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(); } – Egemen Çiftci Oct 13 '17 at 06:24
  • 22
    What 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
  • 1
    You'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
    Answer is unusable as it is. – Kappacake Jan 10 '22 at 10:39
17

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

Thomas Levesque
  • 286,951
  • 70
  • 623
  • 758
  • 11
    But 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
  • 13
    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) – 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
1

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

PWCoder
  • 93
  • 6