1

我一直在将 WPF 用于一个远未完成的新项目。这是一个爱好项目,也是一个非常有用的项目。

我希望具有跨平台兼容性(即 Linux + Mac + Windows),但 Windows 是主要目标。我对 Web 语言以及 C# 和 Erlang 非常熟悉,但 C/C++ 不在其中,我讨厌 Java。因此,为我选择 WPF 是很自然的举动。

但是,在阅读了http://www.mono-project.com/WPF等众多资源之后:

在这一点上,我们强烈建议对 WPF 感兴趣的用户改用 Silverlight,因为它现在可以在浏览器之外使用,并提供一组丰富的跨平台 API 和功能。

我开始怀疑是否应该将我的应用程序移植到 Silverlight 并改用它。

几个事实:

  • 我的应用程序是纯桌面应用程序,应该是这样。它需要对系统资源的较低级别的访问(但不是低到 .NET 还不够)。
  • 我希望支持这三个平台,但 Windows 是主要关注点。
  • 我更喜欢 C# 和 .NET 以及类似于 WPF 的东西,其中 UI 是声明性的,以干净的方式与代码分离,并允许丰富的用户界面。

我听说 Silverlight 已经在 Mac 上工作了,并且可以通过 Moonlight 支持 Linux。

我应该考虑从 WPF 切换到 Silverlight 吗?可能会出现什么问题?

4

2 回答 2

3

首先,我会考虑这个答案。

要点是(实际上)Silverlight 是 WPF 的子集,因此如果您的应用程序用户群仅为 PC/Window 用户,您可能希望在 WPF 中开发您的应用程序,因为在功能方面它仍然比 Silverlight 丰富得多,而且因为它是桌面应用程序,因此您可以访问本地计算机。如果你想开发一个基于 Web 的应用程序,它可以在浏览器上运行,不仅在 PC 上,而且在 Mac 上,那么你想在 Silverlight 中进行开发。

在我看来,对于您的要求, WPF 仍然是最佳选择。

于 2012-05-06T11:05:17.007 回答
2

好吧,根据经验,我可以看出,有些东西在 Silverlight 中不会像在 WPF 中那样工作。我最近遇到的一些事情(虽然还有很多):

  • 绑定不能完全按照您的意愿工作。例如,默认情况下,在 WPF 中,您的绑定属性会在文本字段上的 keyUp 上更改。在 Silverlight 中情况并非如此:它将在 Blur 上更新。像 Caliburn.Micro 这样的框架通过隐式添加来解决这个问题。
  • WPF 有一个叫做 Adorners 的东西。这些基本上允许您为调整大小、旋转等内容添加小的 UI 元素。您通常在设计师中看到的内容(拖动以调整大小)。您可以在 Silverlight 中制作类似的东西,但它有点复杂。
  • 我不确定 WPF,但在 Silverlight 中,对 Web 服务的调用最终是在 UI 线程上完成的。你可以在任何你想要的地方设置它,但实际的调用和回调是在主线程上完成的。在处理可能需要一段时间才能执行的网络呼叫结果时要记住的事情(如果我错了,有人可以纠正我)。

我认为您应该使用新应用程序的典型方式是从 Silverlight 开始,如果您确实需要,则迁移到 WPF。另外,有人告诉我,将 Silverlight 应用程序移植到 winRT/Metro 会稍微容易一些,所以这可能是您想要检查的内容。

另外 这里是 MSDN 中描述各种差异的链接:http: //msdn.microsoft.com/en-us/library/cc903925%28v=vs.95%29.aspx

于 2012-05-06T11:03:05.287 回答