如何使用C#在MonoMac中打开窗口作为模式对话框?

时间:2013-04-05 11:09:13

标签: c# macos monomac

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

我有一个继承MyWindowController的班级MonoMac.AppKit.NSWindowController,并打开此窗口的新实例,如下所示:

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

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

即可完成此操作
mwc.ShowDialog();

所以我想要的是MonoMac相当于ShowDialog(),我相信。

2 个答案:

答案 0 :(得分:4)

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

看起来我需要使用NSApplication对象:

NSApplication.SharedApplication.RunModalForWindow(ewc.Window);

答案 1 :(得分:2)

我在上面的答案中取得了成功,但是在按下“关闭”按钮的情况下却无法解除模态。解决方案是添加代码

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

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