Создать пункт меню строки состояния из NETCore в macOS
Я создаю приложение для MacOS с.NET Core 3.1 и фреймворком Avalonia UI. И столкнулся с проблемой, что Avalonia еще не имеет реализации TrayIcon/StatusBar для macOS. В связи с этим я решил создать собственную библиотеку на Objective C и вызвать ее из моего управляемого кода. Есть код:
@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, который будет создавать строку состояния и обрабатывать щелчки пользователей. В идеале это должен быть один метод, который получает ссылки на функции и вызывает их, когда пользователь щелкает по меню.