c# - MonoMac 中 NSApplication 的子类

标签 c# cocoa mono monomac nsapplication

我需要在 MonoMac 中继承 NSApplication 来重写 NSApplication 的 sendEvent(C# 术语中的 SendEvent)方法,以便接收媒体键事件(Macbook 上的播放、暂停、下一个、上一个),如下所述: Listening to mac keyboard play/pause events在这里:https://bitbucket.org/nkreeger/whitedragon/src/6f530c8a34a7/component/sbAppleMediaKeyController.mm

到目前为止,我想出了这段代码:

class MainClass
{
    static void Main (string[] args)
    {
        MyApp.Init ();
        MyApp.Main (args);
    }
}
class MyApp : NSApplication
{
    public override void SendEvent (NSEvent theEvent)
    {
        Console.WriteLine ("event received!");
        base.SendEvent (theEvent);
    }
    public override void SetMainMenu (NSMenu aMenu)
    {
        Console.WriteLine ("main menu set!");
        base.SetMainMenu (aMenu);
    }
}

但是 SendEvent 或 SetMainMenu(我出于测试目的添加的,因为 SetMainMenu 应该在启动时调用一次)都没有被调用,因为我没有得到任何控制台输出。

正确的做法是什么?

最佳答案

仅子类化 NSApplication 不足以让您的子类替换普通子类。您还必须在应用程序 plist 中设置您的 NSPrincipalClass

参见:

https://developer.apple.com/library/mac/#documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html

关于c# - MonoMac 中 NSApplication 的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11790349/

相关文章:

c# - 使用 EPPLUS 下载受密码保护的 Excel

mono - .NET Core,Mono和ASP.NET在非Windows平台上如何关联?

c# - 谷歌语音转文本 API : Enable Word Confidence Not Found

Objective-C 响应选择器

objective-c - 来自两个 NSImage 的 NSImage

iphone - NSDate 中的 +0100 值意味着什么?

asp.net-mvc - Mono 上的 ASP.NET MVC

.net - user32.dll FlashWindow 的托管替代品

c# - VSTO 部署无法在没有 Visual Studio 的计算机上运行

c# - WCF 服务中的 SQLite AccessViolationException