WPF の Window クラスでは、WinForm における MaximizeBox/MinimizeBox プロパティは廃止され、代わりにResizeMode プロパティで賄われるようになっています。しかし ResizeMode 列挙体には CanMinimize はあっても CanMaximize はないため、最小化だけ禁止というのは実現できません。またウィンドウ境界線のドラッグによるリサイズ動作も兼ねるため、最大化ボタンは使えないけど自由なリサイズは許可したい、といった要求には応えられません。ResizeMode によるリサイズ機能関連のプロパティ一元化は方向として良いと思うんですが、柔軟性が犠牲になっているのは残念な物です。
リサイズは、最大化、最小化、ドラッグによるリサイズ、という三つの独立した機能が考えられます。独立しているんですから、それぞれ独立したプロパティにしてしまいましょう。依存関係プロパティにすればバインディングもできて便利です。
これらのリサイズ機能は Windows の機能に依存しています。具体的に言うとウィンドウスタイルの、WS_MAXIMIZEBOX、WS_MINIMIZEBOX、WS_SIZEBOX です。これらの設定は WinForm なら CreateParams をオーバーライドするだけで簡単に実装できたんですが、その辺をできるだけ隠蔽している WPF では面倒です。ウィンドウハンドルを取得して、Win32API の SetWindowLong 関数で後からスタイルを設定する必要があります。
ソースコード表示