WindowChromeを適用したウィンドウを最大化したときに画面サイズぴったりで最大化させたい
WPF で WindowChrome を適用したウィンドウを最大化すると画面からはみだして最大化されます。こちらを画面サイズにぴったりあわせて最大化させたいです。
この補正をするためにウィンドウの BorderThickness に 8 を指定しているのですが、環境によっては隙間ができてしまうようです。
このギャップ値(8)をシステムから求める正しい方法はありますでしょうか。もしくはぴったりに最大化する別の方法があるのでしょうか。
補足
- WindowChrome の ResizeBorderThickness の値を使用するという情報を見つけたのですが、この値にかかわらず 8 にしないとぴったり最大化されませんでした。
- 下記コード例では省略していますが、ギャップ値(8)には DPI を反映させて使用しています。
実装例
<Window ..省略..>
<WindowChrome.WindowChrome>
<WindowChrome />
</WindowChrome.WindowChrome>
<Border BorderBrush="Red" BorderThickness="1">
<Button Content="Maximize" VerticalAlignment="Center" HorizontalAlignment="Center" Padding="20" Click="MaximizeButton_Click" />
</Border>
</Window>
using System;
using System.Windows;
namespace WpfMaximize
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.StateChanged += MainWindow_StateChanged;
}
private void MainWindow_StateChanged(object sender, EventArgs e)
{
if (this.WindowState == WindowState.Maximized)
{
this.BorderThickness = new Thickness(8); // この値の求め方は?
}
else
{
this.BorderThickness = new Thickness(0);
}
}
private void MaximizeButton_Click(object sender, RoutedEventArgs e)
{
if (this.WindowState == WindowState.Maximized)
{
this.WindowState = WindowState.Normal;
}
else
{
this.WindowState = WindowState.Maximized;
}
}
}
}
環境
- Windows7, Windows10
- VisualStudio 2019
- .NET Framework 4.7.2
問題の発生する環境例
Windows7の個人設定でテーマを Windowsクラッシック に変更すると 8 では隙間ができることを確認しました。この場合は 4 で丁度になるようです。