【问题标题】:Cross platform apps with WPF使用 WPF 的跨平台应用程序
【发布时间】:2026-02-20 10:55:02
【问题描述】:

我正在考虑用 C# 开发一个桌面应用程序。虽然 windows 将是我的主要目标,但稍后我将尝试在 MacOS X 和 linux 中运行该应用程序。我今天可以以简单的方式做到这一点吗? 我知道单声道项目,但我不清楚我是否可以以简单的方式做到这一点。

另外,WPF 和 Silverlight 之间是什么关系? AFAIK Silverlight 遵循类似于 Flash 或 Java 的插件模型。我可以使用 Silverlight 开发我的桌面应用程序并将其部署在 windows、linux 和 os x 上而无需进行太多更改吗?

任何指针将不胜感激。

【问题讨论】:

  • Silverlight 实际上与 WPF 没有太多共同之处。 WPF 是一个用于构建桌面应用程序的框架,Silverlight 是一个浏览器插件,很像 Flash。 Silverlight 应用程序可以在 Windows 和 Mac OS X 上本地运行,也可以通过 Mono 的 Moonlight 项目在 Linux 上运行。
  • “Silverlight 实际上与 WPF 没有太多共同点”:我不会这么说……它们确实有很多共同点! XAML 语言、DependencyObject 模型、大多数控件……有一些 WPF 功能在 Silverlight 中不可用,还有一些 Silverlight 功能在 WPF 中不可用,但随着这两个产品的最新版本,差距越来越小
  • 托马斯是对的。此外,Microsoft 明确的目标是融合 WPF/Silverlight 框架,以便及时实现它们几乎完全可互操作。

标签: c# wpf mono cross-platform


【解决方案1】:

Mono 项目还不支持 .Net 3 和 WPF,而且可能还需要一段时间。

Silverlight 可能足以满足您的需求。 从 Silverlight 3.0 开始,您可以在浏览器之外运行 Silverlight,甚至可以在桌面上创建一个快捷方式。

【讨论】:

  • 注意:Moonlight 目前只稳定支持 Silverlight 1.0,并且只有 2.0 的 pre-alpha 版本。
  • Mono 确实支持许多 .net 3.x 功能,但不支持 WPF。
  • 正如 Supercheetah 所说,monoproject (moonlight) 仅完全支持 SL 1.0,部分支持 SL 2.0。但是如果您需要在浏览器之外赢得 SL,那么它们只能在 Mac 和 Windows 上运行。如果你真的需要支持 linux,你可能需要研究其他技术,比如 Adob​​e AIR 或 Java Applet。
【解决方案2】:

最后我听说,Mono 项目没有实现 WPF 的计划,但是他们正在开发其他 .NET 3.5 功能,尤其是 LINQ 和 ASP.NET MVC。在 Mono 中实现 WPF(超出 API 的大小和复杂性)的问题在于,在 Windows 上它使用 DirectX 进行渲染,因此 Mono 的实现需要使用 OpenGL。绝对不是小事。

【讨论】:

    【解决方案3】:

    WPF 用于构建仅限 Windows 的桌面应用程序。目前不支持其他平台。如果必须支持跨平台,您可以创建基于浏览器的应用程序并使用 Silverlight。不过,Silverlight 在浏览器中运行应用程序,因此您无法使用它制作“桌面”应用程序。

    【讨论】:

    • 您可以使用 Silverlight 3 制作在浏览器之外运行的应用程序。但是,它们仍然受到 Silverlight 沙箱的限制。
    【解决方案4】:

    Mono 正在努力确保 Silverlight 跨平台运行(如堆栈溢出播客之一所述)。所以这似乎是一个不错的方法。

    【讨论】: