如何让Xamarin.Mac应用隐藏窗口?已设visibleAtLaunch="NO"仍显示
解决Xamarin.Mac应用窗口无法隐藏的问题
嘿,我明白你的困扰——明明在Main.storyboard里把窗口的visibleAtLaunch="NO"属性设好了,但窗口还是会弹出来。这大概率是因为Xamarin.Mac的默认项目模板里,代码层主动触发了窗口显示的逻辑,我们只需要找到并屏蔽这些代码就行,一步步来:
1. 检查AppDelegate.cs的核心方法
默认情况下,Xamarin.Mac项目的AppDelegate.cs里的FinishedLaunching方法会强制让窗口显示出来,这是最常见的原因。打开这个文件,找到以下代码段:
public override void FinishedLaunching(NSObject notification) { // 就是这行代码在搞事情! Window.MakeKeyAndOrderFront(this); }
你只需要注释掉或者直接删除这行Window.MakeKeyAndOrderFront(this);代码就行。修改后应该是这样:
public override void FinishedLaunching(NSObject notification) { // 已屏蔽窗口自动显示的逻辑 // Window.MakeKeyAndOrderFront(this); }
2. 排查其他可能的触发点
如果上面的修改后窗口还是显示,那得检查其他地方有没有主动调用窗口显示的方法:
- 看看有没有其他重载的启动方法(比如
applicationDidFinishLaunching) - 检查ViewController或者自定义初始化类里,有没有调用
Window.OrderFrontRegardless()、Window.MakeKeyWindow()这类方法 - 确认是否有第三方库或者插件在启动时触发了窗口显示
3. 确认Storyboard属性设置正确
最后再确认一下Main.storyboard里的属性确实生效:右键点击Main.storyboard,选择“Open As” -> “Source Code”,找到<window>标签,确保visibleAtLaunch="NO"存在且没有被覆盖:
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="Window" animationBehavior="default" id="Qy2-9c-0k2">
额外提示
如果之后需要手动控制窗口显示(比如点击菜单栏图标时弹出),只需要在对应的事件里重新调用Window.MakeKeyAndOrderFront(this);就可以了,完全不影响后续的窗口操作。
内容的提问来源于stack exchange,提问作者Frank Schwieterman
相关产品推荐
相关产品推荐

