52

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

4

4 回答 4

25

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

于 2009-08-16T00:03:20.870 回答
25

这是有关如何实现此目的的示例:

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

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

对于 MouseDown -

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;
}
于 2011-02-16T09:18:12.780 回答
16

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

于 2009-08-16T00:24:22.017 回答
0

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

于 2021-09-15T18:14:24.617 回答