1

我只想设置 WPF 窗口的标题栏和边框,但标题背景属性看起来并没有在类中公开。

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

要设置的正确属性是什么?

我正在参考: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>

我看到的唯一属性是 Title 属性,设置它的颜色没有效果

4

1 回答 1

2

所以我解决了这个问题,它比我最初想象的更复杂。由于标题栏在编辑时位于非客户区,我会失去角落按钮的可见性。

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

这将为您提供一个带有边框的窗口,并且标题栏也将具有颜色。不过,您需要实现角按钮。

   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>
于 2019-02-11T17:16:06.830 回答