2016-09-23 9 views
0

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

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

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

Как сделать 1px границы, как Google Chrome (или Windows 10 в проводнике) имеет? Отрицательный 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(); 
} 

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

+0

Я просто использую стиль окна Mah.Apps (хотя я больше не использую их стили интерфейса Metro). Тогда я знаю, что он будет согласован в разных операционных системах и будет иметь больший контроль над всеми элементами. – Joe

+0

@Joe Я бы хотел использовать собственное решение, потому что хочу иметь TabControl в моем окне хром. Есть идеи? – ArtyomIsFlash

+0

Ах, конечно. Я бы посмотрел на их код BorderlessWindowBehavior, а затем https://github.com/MahApps/MahApps.Metro/blob/fd47b9ff616febc36c86a6b332578e011f181ce3/MahApps.Metro/Behaviours/BorderlessWindowBehavior.cs. – Joe

ответ

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 единицы внизу и слева. В противном случае вы можете просто нарисовать большой белый прямоугольник.

 Смежные вопросы

  • Нет связанных вопросов^_^