【问题标题】:Mono with C# - Converting a WinForms interface over to Cocoa? (or whatever the default OS X interface is)Mono with C# - 将 WinForms 界面转换为 Cocoa? (或任何默认的 OS X 界面)
【发布时间】:2011-06-27 19:08:19
【问题描述】:

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

我正在考虑学习 Objective-C 以便我可以编写“合适的”OS X 应用程序,但目前我希望能够让我的项目在 Apple 上运行,而不会让它们看起来像科学怪人一样.

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

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

再次感谢!

【问题讨论】:

  • 我希望 facebook 链接有效。它显示了一个将 WinForms 应用程序移植到 Cocoa 的示例。

标签: winforms cocoa macos mono porting


【解决方案1】:

如果您想创建一个具有原生外观的 OSX 应用程序,那么您想使用 Cocoa 是正确的。如果你还想使用 C#,可以使用MonoMac

MonoMac 允许您在 OSX 上本地构建 GUI(实际上,使用 Apple 提供的 Interface Builder),但允许您使用 .Net/C# 编写应用程序。这样您就可以继续使用现有的应用程序逻辑,而只需更改 GUI 代码。

【讨论】:

    【解决方案2】:

    移植的应用程序看起来总是像移植的应用程序,这几乎是普遍事实。即使是拥有巨额预算的大公司也无法做到更好(我引用 Adob​​e - 真是一团糟)。

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

    没有其他方法不以一个看起来蹩脚的端口结束,该端口充满了由于移植者对目标平台不够熟悉而导致的错误和行为问题。这仅限于 Mono/C#-to-Cocoa/Obj-C。反之亦然。甚至桌面应用程序的 Java-for-PlatformA-to-Java-for-PlatformB 端口也会遇到这些问题。如果您想要最佳的用户体验,请从可靠的架构开始并为平台构建。

    也就是说,通过意识到这一点并希望做得更好,您已经领先一步。太棒了! :-) 虽然我不知道这条路径的任何教程,但我建议即使这不是正确的方法,因为您表示您正在寻找质量。使用许多 Cocoa 书籍和更多在线社区(例如这个)并学习该平台,然后再提交适用于 Cocoa 的架构和代码库。

    根据评论辩论更新

    要明确一点:我并不是说没有办法或没有任何工具可以使它成为可能。实际上我见过很多,但不记得了,也不会费心去谷歌搜索。我的观点仍然存在:OP 关心本机外观的质量(我假设行为和可能的性能),并且由于平台架构和用户体验习惯的固有差异,移植工具/翻译层无法实现这一点。 OP 怀疑最好学习该平台并专门为其构建,我同意。您的意见可能会有所不同。试试看。

    【讨论】:

    • 看看这个问题:“是否可以将 WinForms 应用程序转换为 Cocoa?Cocoa 是正确的界面吗?”假设实际模型和业务逻辑与 WinForms 应用程序分离,完全可以在 Obj-C 和 Cocoa 重新实现视图下重用它。 Win/win:保留了重要的 C# 位,没有人会知道它不是一个完全原生的应用程序。在这里:fallingcanbedeadly.com/posts/about-nsducttape许多仅在 Mac 上“完全原生”的 Cocoa 应用程序也使用 Obj-C 下的 C/C++ 来实现模型和业务逻辑。
    • @Joel:看起来你错过了问题和我的答案的重点(或者我离题太远了)。我从来没有说过这是不可能的——我说过,鉴于 OP 不想让它看起来(我假设行为)​​像一个糟糕的移植,最好的选择是为平台构建而不是移植。此外,由于 Objective-C 是 C 的超集,所以无论如何都是 C - 只是使用 Cocoa 的母语是阻力最小的路径。
    • @Joel:关于您的链接,这可以追溯到“当然,这是可能的”,但魔鬼在细节中。正如 OP 所暗示的那样,使用任何类型的翻译/适应层都有很多陷阱。期望功能和行为的直接架构到架构映射是不合理的,因此当您使用这样的应用程序时会产生“这看起来像一个糟糕的端口”的感觉。
    • @Joel 至于你的 PS:甚至 WebKit 本身也是 C++ 框架之上的 Objective-C 单板;)
    • 我不同意你的断言,即重写整个应用程序需要做一个好的原生界面。无论背后的代码是 C#、C++、C、Obj-C、Java 还是其他任何东西,你都可以拥有一个很棒的原生 Mac 界面,即使代码都是“纯”的,你也可以轻松拥有一个可怕的非 Mac 界面Objective-C。
    猜你喜欢
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    相关资源
    最近更新 更多