WindowChrome - слишком толстая граница для Windows 10
Проблема в том, что граница слишком толстая для Windows 10.
Если вы не видите скриншот ниже, то вот текст:
- Эта граница слишком толстая слева, справа и снизу
- Граница также ярче на этих краях
Как сделать границу размером 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 единицы снизу и слева. В противном случае вы можете просто нарисовать большой белый прямоугольник.