问题描述
我正在使用.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 (将#修改为@)