WindowChrome - слишком толстая граница для Windows 10

Проблема в том, что граница слишком толстая для Windows 10.

Если вы не видите скриншот ниже, то вот текст:

  1. Эта граница слишком толстая слева, справа и снизу
  2. Граница также ярче на этих краях

Как сделать границу размером 1 пиксель, как в Google Chrome (или в проводнике Windows 10)? Отрицательный 1px не работает хорошо, он делает границу белым, и он все еще толстый.

Скриншот проблемы

Framework - это.NET Framework 4.6.2.

Код:

<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:AnotherOffice"
        xmlns:System="clr-namespace:System;assembly=mscorlib" x:Name="window" x:Class="AnotherOffice.MainWindow"
        mc:Ignorable="d"
        Title="AnotherOffice Text v0.0.1 - New document" Height="720" Width="1280" Background="{x:Null}" WindowState="Maximized" Margin="0" BorderThickness="8">
    <Window.Style>
        <Style TargetType="{x:Type Window}">
            <Setter Property="WindowChrome.WindowChrome">
                <Setter.Value>
                    <WindowChrome
                        GlassFrameThickness="8,40,8,8"
                        ResizeBorderThickness="2"
                        CornerRadius="0"
                        CaptionHeight="32"
                        UseAeroCaptionButtons="True"
                        />
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Style>
    <local:AnotherOfficeTextBase Margin="0,32,0,0"/>
</Window>

UPD: пытался использовать этот код:

if (SystemParameters.IsGlassEnabled)
{
    WindowChrome winChrome = new WindowChrome();
    winChrome.CaptionHeight = 32;
    winChrome.CornerRadius = new CornerRadius(0);
    winChrome.GlassFrameThickness = new Thickness(8, 32, 8, 8);
    winChrome.ResizeBorderThickness = new Thickness(1);
    winChrome.UseAeroCaptionButtons = true;
    WindowChrome.SetWindowChrome(this, winChrome);
    InitializeComponent();
} else
{
    MainWindowNoGlass fallback = new MainWindowNoGlass();
    fallback.Show();
    Close();
}

И... никакого эффекта.

1 ответ

Вот самое простое решение, которое я нашел:

Избавьтесь от всего кода, касающегося толщины границ, хрома окна и т. Д. В верхней части области содержимого в главном окне xaml вставьте следующее:

<WindowChrome.WindowChrome>
    <WindowChrome GlassFrameThickness="0.5,28,0,0.5" NonClientFrameEdges="Right"/>
</WindowChrome.WindowChrome>
<Window.Template>
    <ControlTemplate>
        <ContentPresenter Content="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Window}, Path=Content}"/>
    </ControlTemplate>
</Window.Template>

Это справится со всем. Вы можете легко нарисовать контент в области Non-Client, и окно будет выглядеть нормально (достаточно). Если вам действительно нужен белый фон, вы можете установить GlassFrameThickness в -1и нарисуйте границу в 0,5 единицы снизу и слева. В противном случае вы можете просто нарисовать большой белый прямоугольник.

Другие вопросы по тегам