是否可以在 Gtk# Window/Widget 中托管 Winforms 控件?

Is it possible to host a Winforms control in a Gtk# Window/Widget?

我在 Ubuntu 上使用 MonoDevelop 开发 GUI,它只真正支持 Gtk# 作为 GUI 框架。问题是我想使用一些仅作为 Winforms 控件提供的第三方控件。有没有办法在 Gtk# window 中托管 winforms 控件,就像我们如何在 Winforms 应用程序中托管 Wpf 控件一样(反之亦然)?

没有直接的方法可以做到这一点。 Linux 上的 WinForms 直接与 X11 互操作。可以将 X11 window 嵌入到 Gtk 中,但是您需要处理它周围的所有内容,例如小部件分配、大小调整等。

所以快速回答是否定的。您可以在此处查看单声道 System.Windows.Forms 实现:https://github.com/mono/mono/tree/master/mcs/class/System.Windows.Forms/System.Windows.Forms。应该可以检索控件的 X11 window 句柄并将其嵌入到 Gtk 中。但是没有 "official" API 可以做到这一点,所以你必须为 X11/Gtk 编写一些额外的本地包装器和一个 Gtk 包装器小部件来处理所有需要的 Gtk 东西调整大小并呈现 Gtk 小部件。