有没有办法编写一个可以在Windows 7和Vista上运行的WinRt(Metro)应用程序?

时间:2011-09-15 08:32:04

标签: windows-8 windows-7 windows-runtime microsoft-metro

我们不能让我们的客户长时间无法升级到Windows 8。但是对于我们应用的“平板电脑”/“触摸”版本,需求

那么我们怎样才能支持在Windows 8上与Metro接触以及从单一代码库接触现有客户?

当WPF问世之后,微软看到很多“Pushing”并在Windows XP上运行之后 - 就像WinRT所讨论的那样。

(我不期待任何解决方案可以在XP上运行,因为XP支持正在减少。)

另请参阅:Can the ARM version of Windows 8 only run Metro (WinRt) style apps?

5 个答案:

答案 0 :(得分:17)

最佳答案是您不希望在Windows 7和Windows 8 Metro风格上运行相同的应用程序。最适合鼠标和键盘(Windows 7)的用户界面不适用于先触摸演示,反之亦然。重新想象两个不同世界的用户界面非常重要。

那就是说,如果你想分享很多代码,你有两个选择: 1)主要用JavaScript / HTML5编写。这将允许您重用许多资产(尤其是业务逻辑部分)。 2)将其写入(桌面)Silverlight。 Silverlight XAML最接近Windows XAML。 WPF离得更远,以后需要更多的重新工作。

在任何一种情况下,您都应该查看并遵循编写跨平台代码时使用的原则。理解平台依赖关系并将它们隔离在间接边界之后。您想要本地化所有必须更改的代码。例如,您不希望调用.Net System.IO.File API,您知道这些API必须更改为Windows.System.Storage调用分散在整个代码中。相反,您希望将其本地化在一个可以在以后修改的函数中。

答案 1 :(得分:4)

我能想到的唯一方法是在HTML5 / CSS3 / JS中实现您的应用程序,并尽可能避免使用WinRT API - 这可能是可行的,具体取决于您的应用程序需要做什么(例如便携式2D HTML5画布很容易使用图形。

然后,对于Win8,您将其打包为Metro Web应用程序。对于Win7及以下版本,您编写了一个简单的应用程序,它嵌入您选择的浏览器(不是IE9,因为它不适用于XP - 所以Firefox或Chrome),所有Chrome都隐藏了,并在您的嵌入式浏览器中加载HTML5应用程序。 / p>

答案 2 :(得分:4)

正如其他人所说,你不希望完全在Win8 Metro和Win7 / Vista桌面上使用相同的应用程序。如果使用适合的设计模式正确构建应用程序,则可以在您需要的各种版本之间共享相当多的代码。对于Win8版本,您将使用WinRT,对于Win7 / Vista,您可以选择Silverlight或WPF。

我发表了一些文章,说明了如何做到这一点,它们还包含了相当多的代码:

答案 3 :(得分:2)

  

我们不太可能看到微软推出Metro风格   应用程序框架由于级别而返回到过去的版本   进入Windows 8的重新架构。

我同意Zac on this point。看来,随着Windows 8(和Windows Runtime)的推出,微软肯定推动技术和可用性。

  

Metro UI是一种不同的UI范例。如果您使用当前   Win32控件(包括WPF控件),你的应用程序将   在Metro看起来真的过时了。解决这个问题的唯一方法是   使用Metro重新实现UI(MVVM设计中的View类)   控制。但是,C#和大多数.NET API都是一流的   在这种新环境中的公民。你应用的其余部分应该   没事。

由于您已经拥有了我认为相当大的应用程序,因此您的最佳解决方案是将视图 model-viewmodel 分开。然后,您可以继续开发Windows 8 Metro全屏触摸友好界面和“经典”窗口界面(我们为最后几年 x 所做的工作)。凭借良好的分离,设计和出色的源代码控制解决方案(即Perforce ),您将能够共享大量代码库。


除了your recent question on Windows Runtime给出的答案之外,Bill Wagner(我跟随的众多C#博主之一)已在WinRT and managed languages会议上发布了摘要;如果你有几分钟的话,这是一个很好的阅读和推荐。他的摘要澄清的一件事(在最后的常见问题解答中)是 .NET 作为我们使用的框架的品牌的未来将被取代使用 Windows运行时

来自Bill's blog post的另一篇文章:

  

某些.NET API正在针对WinRT进行更改。我没有   详尽的清单,我不确定还有一个。其他API则不然   通过WinRT暴露。 (它们仍然可以作为.net API使用,而不是   Metro / WinRT API。)

答案 4 :(得分:1)

由于Windows 8中重新架构的程度,我们不太可能看到Microsoft将Metro风格的应用程序框架推回到过去的版本。

就像Pavel说的那样,如果你让你的应用程序尽可能多地使用WinRT库,那么就有可能,但是你现在正在构建一个常规的web应用程序。

相关问题