更改 WPF 标题栏背景颜色

Posted

技术标签:

【中文标题】更改 WPF 标题栏背景颜色【英文标题】:Changing WPF title bar background color 【发布时间】:2010-11-19 23:02:18 【问题描述】:

我有一个 WPF Windows 应用程序。我需要更改标题栏的背景颜色。我该怎么做?

【问题讨论】:

相关:***.com/questions/9978444/…. How can I style the border and title bar of a window in WPF?的可能重复 【参考方案1】:

在 WPF 中,标题栏是非客户区的一部分,不能通过 WPF 窗口类进行修改。您需要操作 Win32 句柄(如果我没记错的话)。 本文可能对您有所帮助:Custom Window Chrome

【讨论】:

WPF 中自定义窗口 Chrome 的链接现已失效 @LyleS。该链接工作正常,可能暂时关闭了。 链接失效(再次),可能参考这个link【参考方案2】:

这是一个如何实现此目的的示例:

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

在代码隐藏中处理点击事件。

对于鼠标按下 -

App.Current.MainWindow.DragMove();

最小化按钮 -

App.Current.MainWindow.WindowState = WindowState.Minimized;

对于 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;

【讨论】:

ApplicationCommands.Close 对我不起作用。我使用了 Application.Current.MainWindow.Close();在一个命令中。网格也没有 DoubleClick,我使用了 MouseLeftButtonDown 并使用了这个。 if (e.ClickCount == 2) 最大化(); else Application.Current.MainWindow.DragMove(); 这段代码与所要求的标题栏颜色有什么关系?请解释! 你有几个不完整的东西 - Style & Template。这些在哪里定义/声明? 答案无法使用。【参考方案3】:

也可以创建无边框窗口,自己制作边框和标题栏

【讨论】:

但是您必须自己构建所有任务栏功能(例如移动、双击最大化/恢复大小、双击图标关闭...)。 是的...但这没什么大不了的,例如 DragMove 方法可以轻松处理移动,剩下的就是小菜一碟;) 我知道...但是建立一个自己的标题栏对我来说就像一个肮脏的把戏。(除了创建相同的外观和感觉是一项非常艰巨的任务恕我直言) @MarcelB:这不是一个肮脏的把戏。有一种解决方法可以实现您在上面发布的 Sushant Kurana 的要求。我有几个问题他可能会澄清。但这不是一个肮脏的把戏或黑客。【参考方案4】:

这个项目对我使用 Window Chrome 更改背景颜色非常有帮助。如果您想使用标题返回大量其他自定义内容,那么无边框窗口可能是您的选择。但是对于只是改变颜色,这很简单而且效果很好! https://www.codeproject.com/Articles/5255192/Use-WindowChrome-to-Customize-the-Title-Bar-in-WPF

【讨论】:

以上是关于更改 WPF 标题栏背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

自定义标签栏背景颜色。如何更改标签栏背景的颜色?

更改标签栏的背景颜色

在 ScrollViewer wpf 中更改 ScrollBar 的背景颜色

更改状态栏背景颜色

C# WPF 根据数据更改 DataGrid 行(背景)颜色

选择但失去焦点时更改 WPF treeViewItem 背景颜色