【问题标题】:Creating a windowless menu-bar icon application in Monomac/Xamarin C#在 Monomac/Xamarin C# 中创建无窗口菜单栏图标应用程序
【发布时间】:2013-07-12 23:05:53
【问题描述】:

我正在尝试在 MonoMac/Xamarin.Mac 中创建一个应用程序,该应用程序在启动时没有停靠图标,也没有可见窗口,并且在右上角的菜单栏中只有一个图标。

我在 Info.plist 中设置了 LSUIElement = 1(尝试了 String 和 Boolean 类型),但是在应用程序启动时根本不显示状态菜单图标。我可以让它出现的唯一方法是删除 LSUIElement 标志,尽管停靠图标变得可见。

我使用的sn-p是:

public partial class AppDelegate : NSApplicationDelegate
{
    public AppDelegate ()
    {
    }

    public override void FinishedLaunching (NSObject notification)
    {
        // Construct menu that will be displayed when tray icon is clicked
        var notifyMenu = new NSMenu();
        var exitMenuItem = new NSMenuItem("Quit", 
                                          (a,b) => { System.Environment.Exit(0); }); // Just add 'Quit' command
        notifyMenu.AddItem(exitMenuItem);

        // Display tray icon in upper-right-hand corner of the screen
        var sItem = NSStatusBar.SystemStatusBar.CreateStatusItem(30);
        sItem.Menu = notifyMenu;
        sItem.Image = NSImage.FromStream(System.IO.File.OpenRead(
            NSBundle.MainBundle.ResourcePath + @"/menu_connected.png"));
        sItem.HighlightMode = true;

        // Remove the system tray icon from upper-right hand corner of the screen
        // (works without adjusting the LSUIElement setting in Info.plist)
        NSApplication.SharedApplication.ActivationPolicy = NSApplicationActivationPolicy.Accessory;
    }
}

有没有人知道在 MonoMac 中创建没有停靠图标而只有菜单栏图标的无窗口应用程序的好方法?

谢谢,

BB

【问题讨论】:

  • 你碰巧还有@TheNextman 提供的解决方案吗?我正在拼命寻找一种方法来实现这一点。

标签: c# cocoa monomac xamarin.mac


【解决方案1】:

尝试为“主 nib 文件名”指定 .xib

我前段时间做过这个,对我来说效果很好。像这样的:

  • 新的 monomac 项目
  • 在 C# 中创建了一个“AppController”类:

    [Register("AppController")]
    public partial class AppController : NSObject
    {
        public AppController()
        {
    
        }
    
        public override void AwakeFromNib()
        {
            var statusItem = NSStatusBar.SystemStatusBar.CreateStatusItem(30);
            statusItem.Menu = statusMenu;
            statusItem.Image = NSImage.ImageNamed("f3bfd_Untitled-thumb");
            statusItem.HighlightMode = true;
        }
    
  • 在 MainMenu.xib 中,我删除了应用程序菜单

  • 在 MainMenu.xib 中,我添加了一个自定义对象并将其类型设置为 AppController
  • 我在 .xib 中创建了状态菜单,然后通过插座将其连接到 AppController
  • 在 info.plist 中,我将“Application is agent (UIElement)”值添加为字符串并将其设置为“1”

用 .xib 试试。如果它不起作用,也许我可以分享我的项目让你拆开。

【讨论】:

  • 如果您不介意分享,我很乐意看到一个示例。网上关于这个主题的内容不多,我也在为此苦苦挣扎。谢谢!
  • @EliGassert 试试这个:pastelink.me/dl/395e5a#sthash.iEGMVNju.dpuf
  • AppController 类型注册在示例中类顶部的Register 声明中。它可能不会显示在下拉列表中,但您可以直接输入。
  • 抱歉,我没有示例项目可以发布
  • 我创建了一个包含所有文件内容的公共要点。 gist.github.com/grexican/11252656 另外,这是一个 .zip 文件,我将保留在我的公共共享中,这样它就不会像其他下载链接一样过时:letscrate.com/f/toadsoftware/public/MacStatusMenuExample.zip
猜你喜欢
  • 1970-01-01
  • 2018-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多