更改WPF标题栏背景颜色

Ema*_*iel 38 wpf titlebar

我有一个WPF Windows应用程序.我需要更改标题栏的背景颜色.我怎样才能做到这一点?

Sus*_*ana 24

以下是如何实现此目的的示例:

    <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>
Run Code Online (Sandbox Code Playgroud)

处理代码隐藏中的Click Events.

对于MouseDown -

App.Current.MainWindow.DragMove();
Run Code Online (Sandbox Code Playgroud)

最小化按钮 -

App.Current.MainWindow.WindowState = WindowState.Minimized;
Run Code Online (Sandbox Code Playgroud)

对于DoubleClick和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;
        }
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助.

-Sushant

  • 这段代码与所要求的标题栏的颜色有什么关系?请解释! (11认同)
  • ApplicationCommands.Close对我不起作用.我使用了Application.Current.MainWindow.Close(); 在命令中.此外,没有DoubleClick for Grid,我使用了MouseLeftButtonDown并使用了它.if(e.ClickCount == 2){Maximize(); } else {Application.Current.MainWindow.DragMove(); } (3认同)
  • 答案按原样无法使用。 (2认同)

Mar*_*l B 21

在WPF中,标题栏是非客户区域的一部分,无法通过WPF窗口类进行修改.你需要操纵Win32句柄(如果我没记错的话).
本文对您有所帮助:WPF中的自定义窗口Chrome.

  • WPF 中自定义窗口 Chrome 的链接现已失效 (6认同)
  • @莱尔S。该链接工作正常,可能暂时中断了。 (2认同)
  • 该链接(再次)已关闭,可以参考此[链接](https://docs.microsoft.com/en-us/dotnet/api/system.windows.shell.windowchrome?view=netcore-3.1) (2认同)

Tho*_*que 11

您还可以创建无边框窗口,并自己创建边框和标题栏

  • 但是你必须自己构建所有任务栏功能(如移动,双击最大化/恢复大小,双击图标关闭,......). (8认同)
  • 我知道......但是建立一个自己的标题栏对我来说感觉就像一个肮脏的伎俩.(除了创建相同的外观和感觉是一个非常艰巨的任务imho) (8认同)

Abo*_*ish 5

检查以下示例WPF,以自定义XAML中的窗口外观

此示例说明如何完全自定义窗口的样式/外观,包括非客户区域:标题栏,边框,最大,最小和关闭按钮,同时仍提供所有预期的功能。