使用 WindowChrome Class 设置标题栏背景

Using WindowChrome Class to set title bar background

我只想设置 WPF 的标题栏和边框 window,但标题背景 属性 看起来不会暴露在 class 中。

我想保留所有默认 Window 行为,只设置 Title BarBorder

color property

正确的 属性 设置是什么?

我正在引用:https://docs.microsoft.com/en-us/dotnet/api/system.windows.shell.windowchrome?view=netframework-4.7.2

      <ResourceDictionary>
        <Style x:Key="CustomWindowStyle" TargetType="{x:Type Window}">
            <Setter Property="WindowChrome.WindowChrome">
                <Setter.Value>
                    <WindowChrome/>
                </Setter.Value>
            </Setter>
            <Setter Property="??" Value="Blue"/>
        </Style>
    </ResourceDictionary>

我唯一看到的 属性 是标题 属性 并且设置它的颜色没有效果

所以我解决了这个问题,它比我原先想象的要复杂得多。由于标题栏在编辑时位于 non-client 区域,因此我会失去角按钮的可见性。

最后我不得不重建标题栏并创建一个 class 来实现按钮以获得我想要的外观。

这会给你一个带边框的 window,标题栏也会有颜色。不过,您需要实现角按钮。

   xmlns:shell="http://schemas.microsoft.com/netfx/2009/xaml/presentation"
   <Style x:Key="StandardStyle" TargetType="{x:Type Window}">
                <Setter Property="shell:WindowChrome.WindowChrome">
                    <Setter.Value>
                        <shell:WindowChrome 
                              />
                    </Setter.Value>
                </Setter>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type Window}" >
                            <Grid>
                                <!--Title Panel-->
                                <DockPanel LastChildFill="True">
                                    <Border Background="Blue" DockPanel.Dock="Top" 
                                    Height="{x:Static SystemParameters.CaptionHeight}" x:Name="titlebar">
                                        <Grid>
 <!--Title text only-->
                                            <TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Title}" 
                                VerticalAlignment="Top" HorizontalAlignment="Center" Background="Transparent"  />
                                            <usercontrols:CornerButtons HorizontalAlignment="Right"/>
                                        </Grid>

                                    </Border>
                                    <!--Provides the actual content control-->
                                    <Border Margin="0,0,0,0"  >
                                        <AdornerDecorator>
                                            <ContentPresenter Content="{TemplateBinding Content}"/>
                                        </AdornerDecorator>
                                    </Border>
                                </DockPanel>

                                 <!--Provides the actual window border-->
                                <Border 
                                        Margin="0,0,0,0"
                                        Background="White"
                                        Grid.ZIndex="-1"
                                        BorderThickness="2,2,2,2" BorderBrush="Blue"
                                       >
                                </Border>                              

                                <!--This is the top left system button-->
                                <!--<Button
                                Margin="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(shell:WindowChrome.WindowChrome).ResizeBorderThickness}"
                                Padding="1"
                                HorizontalAlignment="Left"
                                VerticalAlignment="Top"
                                shell:WindowChrome.IsHitTestVisibleInChrome="True"
                                Command="{x:Static shell:SystemCommands.ShowSystemMenuCommand}"
                                CommandParameter="{Binding ElementName=CalcWindow}">
                                    <Image
                                    Width="16"
                                    Height="16"
                                    shell:WindowChrome.IsHitTestVisibleInChrome="True"
                                    Source="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Icon}" />
                                </Button>-->
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>