在macOS上从NETCore创建状态栏菜单项

问题描述

我正在使用.NET Core 3.1和Avalonia UI框架为MacOS创建应用程序。面对一个问题,Avalonia还没有针对macOS的TrayIcon / StatusBar实现。实际上,我决定在Objective C上创建本机lib,并从托管代码调用它。有一个代码

@implementation StatusBarHandler

- (void) createStatusBar {
    NsstatusBar * statusbar = [NsstatusBar systemStatusBar];
    item = [statusbar statusItemWithLength: NSVariableStatusItemLength];
    item.button.title = @"MenuItem";
    item.menu = [NSMenu alloc];
    item.button.action = @selector(ShowMessageBox:);

    NSMenuItem * menuitem1 = [item.menu addItemWithTitle:@"Open A1" action:@selector(ShowMessageBox:) keyEquivalent:@""];
    menuitem1.target = menuitem1;
}

-(void) ShowMessageBox: (id)sender {
    NSAlert *alert = [[NSAlert alloc] init];
    [alert setMessageText:@"Message text."];
    [alert setinformativeText:@"informative text."];
    [alert addButtonWithTitle:@"Cancel"];
    [alert addButtonWithTitle:@"Ok"];
    [alert runModal];
}

@end

但是我面临另一个问题:状态栏和菜单项已创建,但是菜单项处于非活动状态,并且ShowMessageBox不会在单击时调用。经过一番调查后,我发现了一个原因:我需要在NSApplication上下文中创建状态栏。但是,如果使用NSApplication,我应该创建AppBundle,这对我来说不是最佳选择。

因此,问题是:是否可以通过任何方式创建一个小的dylib,以创建状态栏并处理用户单击。理想情况下,它应该是一种接收函数引用并在用户单击菜单调用它们的方法

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...