现在用 C# 来开发跨平台应用已经有很成熟的方案,即共用非界面代码,而每个操作系统搭配特定的用户界面代码。这个方案的好处是可以直接使用操作系统原生的控件和第三方控件,还能够和操作系统深度集成。
这里的深度集成主要是指一些 Windows 专有的系统特性:
Windows 托盘
Windows 跳转列表
Windows 系统主题
也包括一些移动平台的特性,例如 iOS 的原生滑动。
由于操作系统上其他程序一般都使用原生控件,于是只有当你的程序采用同样技术时,它才能很好地保持一致。这是一个大家一般遵守的界面开发约定。苹果公司有详细的界面设计准则,供开发者参考。
游戏程序一般全屏,也不需要遵守这个约定。其他程序,例如 RealPlayer、QQ,也是违背这种约定。个人观点是,尽量不要搞特殊化。
因此如果你决定采用这个方案,那么在不同的操作系统上你需要学习不同的界面框架:
Windows:Windows Forms *
macOS:Xamarin.Mac(封装 Cocoa) **
Linux:GTK#(封装 GTK+)***
iOS:Xamarin.iOS(封装 CocoaTouch)
Android:Xamarin.Android(封装 Android UI)
值得注意的是:
* Windows 平台正在经历整体界面设计的变化,未来标准的界面框架应该是 UWP。WPF 虽然也是微软官方支持的技术,但是和 WinForms 相比,它依然是自己绘制,算不上原生界面框架。
** MonoMac 因为各种原因已经废弃 参见。
*** QtSharp 等框架都不太成熟。
市场上很多成功的项目都是这个方案的受益者。下面举几个例子:
国家仪器的 LabView 官方网站 在 iOS 平台使用 Xamarin.iO