WindowChrome - Windows 10的边框太厚

时间:2016-09-23 08:41:19

标签: c# wpf xaml .net-4.6 window-chrome

问题是Windows 10边框太厚了。

如果您没有看到下面的屏幕截图,那么请点击此处:

  1. 此边框在左,右和底部太厚
  2. 边缘在这些边缘也更亮
  3. 如何制作像Google Chrome(或Windows 10&n;资源管理器)这样的1px边框?负1px不好用,它使边框变白并且它仍然很厚。

    Screenshot of a problem

    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 个答案:

答案 0 :(得分: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个单位边框。否则,您只需绘制一个大的白色矩形。