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 实现仅适用于非常简单的应用程序。看看"Cross-Platform Desktop UIs" Xamarin 员工 Mike James 的博客文章总结了可用的解决方案:
WPF或 WinForms Windows 上的前端,GTK# Linux 上的前端和 Xamarin.Mac在 Mac OS X 上。IMO 这是最好的方法,如果您在应用程序中正确分离了业务层和表示层,它可能比看起来更容易。
XWT 工具包使用相同的 API 并在所有平台上提供原生外观,但只实现了有限的组件子集。它对您的项目的可用性取决于您真正需要的组件。
使用简单的 WebView 组件或 Awesomium HTML UI Engine 创建 HTML 前端.在某些情况下,这可能是一个可行的选择,但我不确定是否可以使用这种方法实现系统托盘图标。
旨在为多平台 QT 工具包实现 .NET 绑定(bind)的开源项目。我从未尝试过,但根据项目网站,它似乎处于早期阶段,目前仅在 Windows 上进行测试。
顺便说一句,我目前正在将 WinForms 用于 Pkcs11Admin应用程序,但我计划在任何受支持的平台上遇到阻止程序错误时立即使用传统方法。