はじめに
WPFアプリケーションを作成した際にタイトルバーを非表示にして、最小化とリサイズは可能としていた。タイトルバーが非表示なので最大化ボタンは無いし最大化されることは無いだろうと思い込んでいました。
ところがユーザーから最大化するとサイズ・グリップ(サイズ変更可能なことが視覚的にすぐ分かるようなフォームの右下のつまみ)を表示が消えて元のサイズに戻せないという報告がありました。
原因
Windows 7以降では、画面の上端にアプリケーションを移動させると最大化するようになっています。「Aero Snap」という機能です。
大画面ディスプレーで大活躍の新機能「Aero Snap」
「Aero Snap」はドラッグ・リサイズ中のウィンドウがデスクトップの端に吸い付くように自動リサイズする機能。
- キャプションを画面上端にドラッグするとウィンドウを最大化。
- 左右どちらかにドラッグするとその方向にウィンドウをリサイズ。
- 上下端までリサイズするとウィンドウが上下一杯方向にウィンドウをリサイズ。
対応
最大化しようとしたら通常サイズにすることで対応しました。
<Window x:Class="Example"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Example"
Height="480" Width="600" MinWidth="200" MinHeight="160"
WindowStyle="None" ResizeMode="CanResizeWithGrip"
StateChanged="Window_StateChanged">
private void Window_StateChanged(object sender, EventArgs e)
{
if (this.WindowState == WindowState.Maximized)
this.WindowState = WindowState.Normal;
}
[pinvoke] WPFでサイズ変更可能なウィンドウから最小化と最大化を削除するにはどうすればよいですか?
最後に
Windows 7以降を長く使っている割には「Aero Snap」という機能に気がついてなく、報告をもらってどうやって最大化するんだろうと悩みました。