2013-04-05 5 views
3

Я разрабатываю приложение Cocoa с помощью MonoMac (C#).Как открыть окно в качестве модального диалога в MonoMac с помощью C#?

У меня есть класс, который наследуется MyWindowControllerMonoMac.AppKit.NSWindowController, и открыть новый экземпляр этого окна, как это:

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

Но как я могу открыть его как модальный диалог? Крайне важно, чтобы ничто в моем приложении не выполнялось, пока диалог открыт, поэтому я не могу использовать оконный лист (который блокирует только текущее окно). И я не могу найти ничего другого, что, похоже, делает то, что я хочу на моем контроллере. В Windows, я сделал бы это просто позвонив по телефону:

mwc.ShowDialog(); 

Так что я хочу это MonoMac эквивалент ShowDialog(), я считаю.

ответ

4

Я потратил почти три часа, пытаясь понять это, прежде чем публиковать вопрос, но, конечно же, я нашел решение сразу после запроса.

Похоже, мне нужно использовать объект NSApplication:

NSApplication.SharedApplication.RunModalForWindow(ewc.Window); 
+0

Каждый раз, когда кто-то задает вопрос и возвращается с ответом, Интернет работал. Спасибо! –

+0

На самом деле, вы когда-нибудь выяснили, как правильно вернуться из модального звонка? –

+0

Нет, это не было необходимо для моего приложения, поэтому я никогда не пытался понять это. –

2

Я имел успех с выше ответ, но тогда были проблемы, отказавшего модальный в том случае, если была нажата кнопка «закрыть». Решение было добавить код

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

к контроллеру окна, а затем установить контроллер окна, чтобы быть делегатом окна путем, в Interface Builder, щелкните правой кнопкой мыши окно и перетащите линию от «делегата» в блок «владелец файла».