Mono与C#-将WinForms接口转换为Cocoa?(或任何默认的OS X接口)

Mono与C#-将WinForms接口转换为Cocoa?(或任何默认的OS X接口),winforms,cocoa,macos,mono,porting,Winforms,Cocoa,Macos,Mono,Porting,我有一个C#应用程序,我已经设法在Mono上运行并在OS X上运行。该应用程序本身运行得很好,但在OS X上运行时,它看起来并不那么好。按钮字体看起来参差不齐,Windows 7版本的许多默认功能都不存在。在我看来,它有点像一个Win98应用程序,上面贴着OSX上边框 我正在研究学习Objective-C,这样我就可以编写“合适的”OSX应用程序,但目前我希望能够让我的项目在苹果上运行,而不让它们看起来像是科学怪人 是否可以将WinForms应用程序转换为Cocoa?Cocoa是正确的界面吗?

我有一个C#应用程序,我已经设法在Mono上运行并在OS X上运行。该应用程序本身运行得很好,但在OS X上运行时,它看起来并不那么好。按钮字体看起来参差不齐,Windows 7版本的许多默认功能都不存在。在我看来,它有点像一个Win98应用程序,上面贴着OSX上边框

我正在研究学习Objective-C,这样我就可以编写“合适的”OSX应用程序,但目前我希望能够让我的项目在苹果上运行,而不让它们看起来像是科学怪人

是否可以将WinForms应用程序转换为Cocoa?Cocoa是正确的界面吗?

如果可能的话,最好的方法是什么,你们中的任何人都知道一个关于这个过程的好的教程/写作让我开始吗?如果能看到一些实际显示这个过程正在完成的东西,那就太好了。我从示例代码和简短的解释中学到的远比从一般文章中学到的多得多


再次感谢

移植的应用程序看起来总是像移植的应用程序,这几乎是千真万确的。即使是预算巨大的大公司也做不到比这更好的事情(我举Adobe的例子——真是一团糟)

在Windows应用程序端口上打一个Mac脸将显示其接缝。如果您希望应用程序表现得像本机应用程序一样(并利用平台提供的与性能相关的优点),那么绝对最好的方法是使用我知道的体系结构文档、规范和要求—您是一名尽责的开发人员—使设计适应本机平台。这就是Cocoa框架(API),它是用Objective-C(语言)编写的

很简单,没有其他路径不以一个外观糟糕的端口结束,该端口充满了由于porter对目标平台不够熟悉而产生的bug和行为问题。这不仅仅局限于Mono/C#到Cocoa/Obj-C。相反的情况也是如此。即使是Java for PlatformA到Java for PlatformB的桌面应用程序端口也会遇到这些问题。如果您希望获得最佳的用户体验,请从坚实的体系结构开始,并针对平台进行构建

也就是说,你已经领先了一步,意识到这一点,并希望做得更好。好极了!:-)虽然我不知道这方面的任何教程,但我建议即使这样也不是正确的方法,因为您指出您正在寻找质量。利用大量的Cocoa书籍和更多的在线社区(如本社区),在致力于适应Cocoa的体系结构和代码库之前,先学习平台

基于评论辩论的更新


要明确的是:我并不是说没有办法,也不是说没有工具可以让这一切成为可能。事实上,我已经看到了很多,但我不记得了,也不会去谷歌搜索。我的观点仍然是:OP关注本地外观的质量(我假设行为和可能的性能),而移植工具/翻译层无法实现这一点,因为平台的体系结构和用户体验习惯存在固有的差异。OP认为最好是学习这个平台并专门为它构建,我同意。你的意见可能会有所不同。有了它。

如果你想创建一个看起来像本机的OSX应用程序,你想使用Cocoa是正确的。如果您仍然想使用C#,可以使用


MonoMac允许您在OSX上以本机方式构建GUI(事实上,使用Apple提供的Interface Builder),但允许您在.Net/C#中编写应用程序。通过这种方式,您可以继续使用现有的应用程序逻辑,只需更改GUI代码。

看看问题:“是否可以将WinForms应用程序转换为Cocoa?Cocoa是正确的界面吗?”假设实际模型和业务逻辑与WinForms应用程序分离,完全可以在视图的Obj-C&Cocoa重新实现下重用它。Win/Win:重要的C#位被保留,没有人会知道它不是一个完全本地的应用程序。这里:附言。许多仅限Mac的“完全本机”Cocoa应用程序也在Obj-C下使用C/C++进行模型和业务逻辑。@Joel:看起来你似乎没有抓住问题和我的答案的要点(或者说我的答案太离谱了)。我从来没有说过这是不可能的——我说过,考虑到OPs不希望它看起来(我假设它的行为)像一个坏的端口,最好的选择是为平台构建,而不是端口。此外,由于Objective-C是C的超集,所以无论如何都是C——只是使用Cocoa的母语是阻力最小的途径。@Joel:关于你的链接,这可以追溯到“当然,这是可能的”,但魔鬼在细节中。正如OP所暗示的,使用任何类型的翻译/改编层都有很多陷阱。期望直接架构到功能和行为的体系结构映射是不合理的,因此当使用这样的应用程序时,“这看起来像是一个蹩脚的端口”。@乔尔:对于你的PS:即使WebKIT本身也是C++框架之上的Objtovi-C贴面;我不同意你的说法,即重写整个应用程序是为了实现良好的本机接口。你可以有一个很棒的本地MAC接口,不管是C++代码、C++、C、Obj-C、java还是其他任何东西,你可以很容易地拥有一个可怕的un-Mac界面,即使代码都是“纯”Objul-C.我希望脸谱网链接工作。它显示了一个将WinForms应用程序移植到Cocoa的示例。