是否有C#/ .NET的跨平台GUI框架?

时间:2009-04-22 21:20:51

标签: c# .net user-interface cross-platform

让我们说只是为了它的乐趣,我决定不再用Java编写桌面应用程序,而是想切换到使用C#。我希望能够构建一个将在某些主流Linux发行版上运行的应用程序,以及最近发布的MS Windows。它将有一个GUI组件。

在Java中,我可以构建一个使用Swing的应用程序。一旦我有它工作,我可以将该jar文件从Windows复制到Linux,反之亦然,这取决于我开发它的位置。它通常与java -jar myapp.jar一起运行。

在C#中可以这样做吗?在C#中是否有与Swing或AWT相同的功能?

11 个答案:

答案 0 :(得分:19)

Eto.Forms(在github上),它是 WPF WinForms GTK 之上的抽象层,以及 MonoMac / Cocoa - 这样您就可以在所有平台上获得本机UI,而无需为每个平台重新实现。您不必受最低公分母的影响,因为您可以为每个平台实现细节(如果需要,但不是必需的)。

它有一个优点,它是纯.NET,只依赖于操作系统提供的依赖,而不是使用GTK或WxWidgets,你必须为各种平台捆绑本机二进制文件。

答案 1 :(得分:13)

可能GTK#可能是最接近的。

我知道其他人说单音,但那不太对。 .Net是单声道,因为微软的Java VM是Sun的Java运行时。 mono并不像Swing那样处于同一个概念空间。为此,GTK#是一个更接近的匹配。

答案 2 :(得分:5)

我相信WinForms的很大一部分是在Mono中实现的。你需要在Linux下安装Mono。但是,您可能会遇到兼容性问题,因为Mono不是Microsoft的努力,也不是他们的正式支持。

答案 3 :(得分:5)

This page有一个Mono支持的GUI工具包列表,包括每个工具包的优缺点。正如其他人所说,WinForms,GTK#和wxNet都是可行的选择。

答案 4 :(得分:4)

Microsoft最近刚刚发布了.NET MAUI,它基于Xamarian并支持.NET核心。

用他们的话说:

当我们考虑在统一的.NET中构建设备应用程序的外观时,我们看到跨多个平台使用的许多设备,从Android和iOS到Windows和macOS。为了满足这一需求,我们很高兴地宣布一个新的一流的UI框架来实现这一目的:.NET多平台App UI,亲切地调用.NET MAUI。

.NET MAUI简化了.NET开发人员的选择,提供了一个单一堆栈来支持所有现代工作负载:Android,iOS,macOS和Windows。

尽管他们没有指定Linux,但据MAUI Github Repo称,有社区开发的支持。

答案 5 :(得分:3)

这是一个较旧的问题,但作为更新,Mono和Xamarin的组合应该可以满足您现代的跨平台需求。

http://www.mono-project.com/docs/gui/winforms/

微软刚刚开源.NET,并承诺将.NET核心带到Linux和MacOS的下一个版本。微软还与Mono和Xamarin建立了密切的合作关系,专门用于帮助他们的Android和Linux库。

http://www.hanselman.com/blog/AnnouncingNET2015NETAsOpenSourceNETOnMacAndLinuxAndVisualStudioCommunity.aspx

答案 6 :(得分:2)

您可以尝试WxWidgets。它支持C#,以及许多其他语言,并且是跨平台的。唯一的缺点是每个平台的重新编译。或者你可以尝试Mono这是非常好的,但要注意有一些兼容性问题的障碍。对于C#应用程序没有预定义的“随处运行”文件,但就像Java有jars一样,如果你想确保兼容性,你最好的选择是为每个平台重新编译。

答案 7 :(得分:2)

我见过的最接近的东西是Mono - 虽然它不支持所有的CLR库但我相信,但它是跨平台的。

答案 8 :(得分:2)

对于iOS,Android和Windows Mobile,有Xamarin.Forms。 http://xamarin.com/forms这是一个抽象层,允许您编写跨平台代码,这些代码绑定到引擎盖下的本机GUI工具包。

我正在寻找更多这样的解决方案 - 我不仅关心移动平台,还关心桌面平台(windows,mac OSX,fedora / ubuntu / etc linux)

答案 9 :(得分:0)

Windows.Forms是用于开发.NET GUI应用程序的标准库

尽管在Windows上得到了很好的支持,但版本2.0也完全由Mono实现,这使得它可以在Mono支持的所有平台上使用。

另一方面,WPF是概念上的新库,目前它主要仅在Windows上得到完全支持,而Mono通过Silverlight实现只支持它的一部分 - Moonlight。

如果您正在为高效的跨平台使用构建应用程序和/或具有保守的性能限制,请转到Windows窗体。

如果您想尝试和学习新的东西,或者如果您正在开发Windows的新应用程序,请转到WPF。这是客户端GUI应用程序的新技术。

答案 10 :(得分:0)

这些天来很多。这取决于您要寻找的东西。 Here是有关这三种选择技术的详细文章。它们不是唯一的技术,但现在它们周围的嗡嗡声最大。

Xamarin Forms

C#,基于XAML,Microsoft拥有开源,支持Android,iOS,UWP等。原生渲染。

Uno Platform

C#,基于XAML的开放源代码,支持Android,iOS,UWP等。原生渲染。

Avalonia

C#,基于XAML的开放源代码,支持Linux,MacOS,Windows等。每个平台上的像素完美渲染。