Windows 8 有没有办法编写一个WinRt(Metro)应用程序,它也可以在Windows7和Vista上运行?

Windows 8 有没有办法编写一个WinRt(Metro)应用程序,它也可以在Windows7和Vista上运行?,windows-8,windows-7,windows-runtime,microsoft-metro,Windows 8,Windows 7,Windows Runtime,Microsoft Metro,我们不能让长期无法升级到Windows8的客户束手无策。然而,对我们的应用程序的“平板电脑”/“触摸”版本有需求 那么,我们如何从单个代码库支持Windows 8上的touch with Metro和我们当前的客户呢 当WPF面世时,在经历了大量的“推动”之后,微软看到了它并使它在Windows XP上工作——WinRT有过类似的讨论吗 (我不希望任何解决方案能在XP上运行,因为XP支持正在逐步关闭。) 另请参见:我能想到的唯一方法是用HTML5/CSS3/JS实现您的应用程序,并尽可能避免使用

我们不能让长期无法升级到Windows8的客户束手无策。然而,对我们的应用程序的“平板电脑”/“触摸”版本有需求

那么,我们如何从单个代码库支持Windows 8上的touch with Metro和我们当前的客户呢

当WPF面世时,在经历了大量的“推动”之后,微软看到了它并使它在Windows XP上工作——WinRT有过类似的讨论吗

(我不希望任何解决方案能在XP上运行,因为XP支持正在逐步关闭。)


另请参见:

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


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

由于Windows 8的重新架构级别,我们不太可能看到Microsoft将Metro风格的应用程序框架推回到以前的版本


正如Pavel所说,如果您不让应用程序使用尽可能多的WinRT库,这是可能的,但您现在正在构建一个常规的web应用程序。

最好的答案是,您不希望相同的应用程序在Windows 7和Windows 8 Metro风格上运行。最适用于鼠标和键盘(windows 7)的UI在触摸优先演示中无法正常工作,反之亦然。为两个不同的世界重新设想UI是很重要的

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

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


我们不太可能看到微软推出Metro风格 由于 重新设计进入Windows8的架构

我同意。随着Windows8(和WindowsRuntime)的推出,微软似乎正在推动技术和可用性的发展

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

由于您已经拥有了我假设的相当大的应用程序,所以最好的解决方案是将视图与模型视图模型分开。然后,您可以继续开发Windows 8 Metro全屏触摸友好的令人敬畏的界面和“经典”窗口界面(我们在过去x年中所做的)。通过良好的分离、设计和优秀的源代码控制解决方案(即Perforce),您将能够共享大量代码库


除了给比尔·瓦格纳(我关注的众多C#blogger之一)的答案外,他还发布了会议纪要;这是一本很好的读物,如果你有几分钟的时间,建议阅读。他的总结澄清了一件事(在最后的常见问题中)就是.NET作为我们使用的框架的品牌的未来将被Windows Runtime所取代

另一篇来自:

WinRT的某些.NET API正在更改。我没有电话 详尽的清单,我不确定是否有。其他API则不适用 通过WinRT暴露。(它们仍然可以作为.net API提供,只是不作为 Metro/WinRT API。)


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

我已经发表了几篇文章,演示了如何做到这一点,其中还包括很多代码:

  • -虽然本文不涉及Win8,但它确实将代码从WPF共享到Windows Phone 7,这是一个非常类似的问题
  • -本文展示了如何使用相同的技术在WinRT和Silverlight之间共享代码

无论采用何种解决方案,都很难找到一个既方便鼠标/键盘又方便触摸的单一用户界面。一般来说,即使您可以使用相同的UI框架,您仍然需要对两个交互模型的UI进行重大更改,以方便用户。例如,对于触摸,滑动是一种非常自然和方便的改变视图的手势,而对于鼠标/键盘,您需要某种选项卡切换。我要强调的是,将尽可能多的逻辑分离到跨平台库中是非常重要的