Использование класса WindowChrome для установки фона строки заголовка - PullRequest
0 голосов
/ 08 февраля 2019

Я хочу просто установить строку заголовка и границу окна WPF, но свойство фона заголовка не выглядит выставленным в классе.

Я хочу оставить все поведение по умолчанию Windowи просто установите color property из Title Bar и Border

Какое правильное свойство установить?

Я ссылаюсь: 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>

Единственное свойство, которое я вижу, это Свойство Заголовка, и установка его цвета не имеет никакого эффекта

1 Ответ

0 голосов
/ 11 февраля 2019

Так что я решил это, и это было гораздо сложнее, чем я думал.Поскольку строка заголовка находится в области, не являющейся клиентом, при ее редактировании я теряю видимость угловых кнопок.

В конце концов мне пришлось реконструировать строку заголовка и создать класс для реализации кнопок, чтобы получитьвнешний вид, который я хотел.

Это даст вам окно с рамкой, и строка заголовка также будет иметь цвет.Вы должны реализовать угловые кнопки, хотя.

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