Windows.Forms库包含许多错误,有效地阻止了应用程序的工作. WinForms Designer无法将WebBrowser控件放在窗体上. NotifyIcon类在LXDE下不起作用(参见KeePass的bugtracker). Clipboard类与Calculate
Linux的默认管理器不兼容.拖放在DockPanelSuite中有问题.由于不透明度问题,WinForms Designer尚未完成. WPF从未实施过,也没有计划这样做.
而mono团队表示“我们不想开发WinForms,因为这是旧技术.”
一个端口桌面C#应用程序如何从Windows到Linux?用Gtk#重写它似乎太难了……
更容易 – 修复单声道WinForms,实现WPF,或者将世界上所有应用程序重写为Gtk#?
正如您已经发现的,Mono WinForms实现仅适用于非常简单的应用程序.看看来自Xamarin员工Mike James的
“Cross-Platform Desktop UIs”博客文章,他总结了可用的解决方案:
>传统方法
Windows上的WPF或WinForms前端,Linux上的GTK#前端和Mac OS X上的Xamarin.Mac. IMO这是最好的方法,如果您在应用程序中正确分离了业务和表示层,它可能比看起来更容易.
> XWT
XWT工具包使用相同的API并在所有平台上提供本机外观,但仅实现了有限的组件子集.它对您项目的可用性取决于您真正需要的组件.
> HTML前端
使用简单的WebView组件或Awesomium HTML UI Engine创建HTML前端.在某些情况下,这可能是一个可行的选项,但我不确定是否可以使用此方法实现系统托盘图标.
> QTSHARP
旨在为多平台QT工具包实现.NET绑定的开源项目.我从未尝试过,但根据项目网站,它似乎处于早期阶段,目前仅在Windows上进行过测试.
BTW我目前正在使用WinForms for Pkcs11Admin应用程序,但我计划在任何支持的平台上遇到阻止程序错误时立即使用传统方法.