Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用MonoMac/Xamarin打开或创建新窗口?_C#_.net_Macos_Xamarin_Monomac - Fatal编程技术网

C# 如何使用MonoMac/Xamarin打开或创建新窗口?

C# 如何使用MonoMac/Xamarin打开或创建新窗口?,c#,.net,macos,xamarin,monomac,C#,.net,Macos,Xamarin,Monomac,我有一个Xamarin/MonoMac项目,有两个窗口。主窗口将打开,并正常运行。但是,我有一个按钮需要打开第二个窗口(让我们将第一个窗口称为“Main”,第二个窗口称为“second”)。两者都有各自的XIB文件和控制器类 该按钮在MainWindowController中设置,功能正常: secondButton.Activated += (o, e) => { //Do stuff } 方法,如Console.WriteLine();单击按钮时,按预期运行 第二个窗口控制

我有一个Xamarin/MonoMac项目,有两个窗口。主窗口将打开,并正常运行。但是,我有一个按钮需要打开第二个窗口(让我们将第一个窗口称为“Main”,第二个窗口称为“second”)。两者都有各自的XIB文件和控制器类

该按钮在MainWindowController中设置,功能正常:

secondButton.Activated += (o, e) => {
     //Do stuff
}
方法,如Console.WriteLine();单击按钮时,按预期运行

第二个窗口控制器类的设置如下:

public partial class SecondWindowController : MonoMac.AppKit.NSWindowController {
    ...
}
我需要做的是使secondButton在被单击时打开SecondWindow的实例,同时将MainWindow的活动实例传递给SecondWindow构造函数

在C#NET中,我只会使用

SecondWindow sc = new SecondWindow(this);
sc.ShowDialog();
我可以用这个打开第二个窗口

NSWindowController nsc = new NSWindowController("SecondWindow", this);
nsc.ShowWindow(this);
但这会导致一个错误

Interface Builder文件中的未知窗口类SecondWindow,正在创建常规窗口

窗口按其应显示的方式显示,但SecondWindowController函数中没有任何函数,即使我运行

nsc.AwakeFromNib();
直接打开窗户。没有控制台输出,所有按钮都不工作

我如何才能打开窗口并正常工作?如果需要更多的信息,请让我知道我需要补充什么,这样我就可以给你


提前感谢

要从序列图像板获取窗口,您需要使用NSStoryboard.InstanceControllerWithiIdentifier(字符串id)作为NSWindowController


您还必须将id设置为脚本中窗口的标识符。

我不使用Interface Builder,而是使用代码创建和连接我的UI。所以我没有一个好的答案给你。但是,值得一提的是,错误和行为是一致的:当从XIB实例化窗口时,它找不到第二个窗口类,因此它不会实例化该控制器(并且该控制器中的任何代码都不适用)。我注意到您在某些地方使用SecondWindow,在其他地方使用SecondWindowController;检查你是否前后一致。