アプリケーション(C#WPFアプリケーション)で次の機能を有効にする必要があります。
- 通常のサイズは1024*768です。
- ユーザーはアプリケーションを最大化できます
- ユーザーはアプリケーションを最小化できます
- ユーザーはアプリケーションを復元できます(1024 * 768)
- ユーザーは、境界線をドラッグしてアプリケーションのサイズを手動で変更することはできません。
ResizeMode
これらの要件をすべて満たすものはありません。何かする方法はありますか?
私は最終的に比較的まともな解決策を見つけました。
アイデアはOnStateChanged
、ウィンドウのイベントをオーバーライドし、最小/最大の制約をキャンセルして更新することです。
ウィンドウが最大化されていない場合は、最小/最大の制約を元に戻すだけです
protected override void OnStateChanged(EventArgs e)
{
if (WindowState == WindowState.Maximized)
{
MinWidth = 0;
MinHeight = 0;
MaxWidth = int.MaxValue;
MaxHeight = int.MaxValue;
if (!m_isDuringMaximizing)
{
m_isDuringMaximizing = true;
WindowState = WindowState.Normal;
WindowState = WindowState.Maximized;
m_isDuringMaximizing = false;
}
}
else if (!m_isDuringMaximizing)
{
MinWidth = 1024;
MinHeight = 768;
MaxWidth = 1024;
MaxHeight = 768;
}
base.OnStateChanged(e);
}
Window.SizeChanged イベントをリッスンし、ハンドラー内で幅と高さを手動で 1027 と 768 に戻すことができます。ユーザーはウィンドウの端をドラッグしてサイズを変更できますが、ウィンドウは設定されたサイズに戻ります。これの欠点は、ユーザーがサイズ変更を試みるたびにウィンドウが「発作」を起こすことです。最小化と最大化は通常どおり機能します。