如何使用c#在MonoMac中打开一个窗口作为模态对话框

本文关键字:一个 窗口 对话框 模态 何使用 MonoMac | 更新日期: 2023-09-27 18:07:28

我正在用MonoMac (c#)开发一个Cocoa应用程序。

我有一个继承MonoMac.AppKit.NSWindowController的类MyWindowController,并像这样打开这个窗口的新实例:

MyWindowController mwc = new MyWindowController();
mwc.Window.MakeKeyAndOrderFront(this);

但是我如何打开它作为一个模态对话框?当对话框打开时,我的应用程序中没有任何其他内容被执行,这是必要的,所以我不能使用窗口表(它只阻塞当前窗口)。我在控制器上找不到任何我想要的东西。在Windows上,我只需调用:

mwc.ShowDialog();

所以我想要的是MonoMac等效的ShowDialog(),我相信。

如何使用c#在MonoMac中打开一个窗口作为模态对话框

在发布问题之前,我花了将近三个小时试图弄清楚这个问题,但当然我在问完之后就找到了解决方案。

看起来我需要使用NSApplication对象

NSApplication.SharedApplication.RunModalForWindow(ewc.Window);

我在上面的答案上取得了成功,但在按下"关闭"按钮的情况下,我在消除模态方面遇到了麻烦。解决方案是添加代码

[Export ("windowWillClose:")]
    public void WindowWillClose(NSNotification notification)
    {
        Console.WriteLine("windowWillClose:");
        NSApplication.SharedApplication.StopModal ();
    }

到窗口控制器,然后将窗口控制器设置为窗口的委托,在Interface Builder中,右键单击窗口并从"委托"拖动一条线到"文件的所有者"块。