Changing WPF title bar background color

WpfTitlebar

Wpf Problem Overview


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

Wpf Solutions


Solution 1 - Wpf

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

Solution 2 - Wpf

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

Solution 3 - Wpf

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

Solution 4 - Wpf

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionEmad GabrielView Question on Stackoverflow
Solution 1 - WpfMarcel BView Answer on Stackoverflow
Solution 2 - WpfSushant KhuranaView Answer on Stackoverflow
Solution 3 - WpfThomas LevesqueView Answer on Stackoverflow
Solution 4 - WpfPWCoderView Answer on Stackoverflow