繁体   English   中英

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

[英]Is there a cross-platform GUI framework for C#/.NET?

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

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

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

Eto.Forms (在 github 上),它是WPFWinFormsGTKMonoMac/Cocoa之上的抽象层 - 因此您可以在所有平台上获得本机 UI,而无需为每个平台重新实现。 您不必受制于最小公分母,因为您可以为每个平台实现具体细节(如果需要,但不是必需的)。

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

可能GTK#将是最接近的。

我知道其他人说过单声道,但这并不完全正确。 .Net 之于 mono 就像微软的 Java VM 之于 Sun 的 Java 运行时一样。 mono 与 Swing 不在同一个概念空间中。 为此,GTK# 更接近。

此页面列出了 Mono 支持的 GUI 工具包,包括每个工具包的优缺点。 正如其他人所建议的,WinForms、GTK# 和 wxNet 都是可行的选择。

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

这是一个较旧的问题,但作为更新,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

这几天有很多。 这取决于你在寻找什么。 是关于这三种选择技术的详细文章。 它们不是唯一的技术,但它们现在最受关注。

Xamarin 表单

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

Uno平台

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

阿瓦隆尼亚

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

微软最近刚刚推出了.NET MAUI ,它基于 Xamarian 构建并支持 .NET 核心。

用他们的话来说:

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

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

尽管他们没有指定 Linux,但根据MAUI Github Repo 的说法,社区为它开发了支持。

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM