🗨️
Xamarin.Macでモーダルを最大化させないようにする
やりたいこと
ModalタイプのSegueで表示したモーダルを最大化できないようにしたい。
やりかた
タイトルバーの最大化ボタンを表示しないようにすればできそうだが、Interface Builder上でViewやModalを選択してインスペクタを見ても、そのような設定項目は見つからない。
タイトルバーはViewControllerではなくWindowに所属しているようだ。
ウィンドウの属性をViewControllerから制御するのは、View.Window.StyleMaskに値をセットすることで実現できるらしい。
StyleMaskに設定できる値は
- Titled
- Closable
- Minitualizable
- Resizable
- Utility
などなど。
モーダルのViewControllerのViewWillAppearで以下のように設定する。
public override void ViewWillAppear()
{
View.Window.StyleMask = NSWindowStyle.Titled;
base.ViewWillAppear();
}
意図したようなモーダルを表示できた。ユーザでは閉じられないので、適切に閉じられるようにプログラムする必要がある。
今回はタイトルバーありで、閉じる、リサイズ、最小化はいずれもできないようにしたかったのでTitledのみを設定した。
もし、タイトルバーがあり、閉じることができる」ように設定したい場合
View.Window.StyleMask = NSWindowStyle.Titled | NSWindowStyle.Closable
というようにビットの和をセットしてやればいい。
環境
Mac OS Catalina 10.15.6
XCode 12.2
Visual Studio for Mac Community 8.8.1 (build 37)
Xamarin.Mac Modern
Cocoa App(AppKit)
追伸
UtilityとかHudはどういう場合に使うのかわからなかったので、知ってる人がいたら教えてほしいです。
Discussion