Создать пункт меню строки состояния из 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, который будет создавать строку состояния и обрабатывать щелчки пользователей. В идеале это должен быть один метод, который получает ссылки на функции и вызывает их, когда пользователь щелкает по меню.

0 ответов

Другие вопросы по тегам