0

问题是 Windows 10 的边框太厚。

如果您没有看到下面的屏幕截图,那么这里是文本:

  1. 这个边框在左边、右边和底部太粗了
  2. 那些边缘的边框也更亮

如何制作像 Google Chrome(或 Windows 10 的资源管理器)一样的 1px 边框?负 1px 效果不好,它使边框变白并且仍然很厚。

问题截图

框架是 .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();
}

而且……没有效果。

4

1 回答 1

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>

这将处理一切。您可以在非客户端区域轻松绘制内容,并且窗口看起来会正常(足够)。如果你真的需要背景也是白色的,你可以设置GlassFrameThickness-1,并在底部和左侧画一个 0.5 单位的边框。否则,您可以只绘制一个大的白色矩形。

于 2017-06-14T19:35:48.363 回答