我们不能就这样把无法升级至Windows 8的客户长期搁置。然而,我们的应用程序存在“平板电脑”/“触摸”版本的需求。
那么,我们如何在单一代码库中支持Windows 8上的触摸和Metro以及我们当前的客户呢?
当 WPF 出现后,经过了大量的“推动”, Microsoft 回应并让其在 Windows XP 上运行 - 是否有类似于 WinRT 的解决方案被讨论过呢?
(我不指望任何解决方案能在XP上运行,因为XP支持正在逐步终止。)
那么,我们如何在单一代码库中支持Windows 8上的触摸和Metro以及我们当前的客户呢?
当 WPF 出现后,经过了大量的“推动”, Microsoft 回应并让其在 Windows XP 上运行 - 是否有类似于 WinRT 的解决方案被讨论过呢?
(我不指望任何解决方案能在XP上运行,因为XP支持正在逐步终止。)
最好的答案是您不希望相同的应用程序在Windows 7和Windows 8 Metro风格上运行。对于适用于鼠标和键盘的UI(Windows 7),它并不适合于触摸为本的呈现方式,反之亦然。重新想象两个不同世界的UI非常重要。
话虽如此,如果您想共享大量代码,则有两个选择: 1)大部分使用JavaScript / HTML5编写。这将使您能够重复使用许多资源(特别是业务逻辑部分)。 2)使用(桌面)Silverlight编写。Silverlight XAML最接近Windows XAML。WPF则更远,并且以后需要更多的重新工作。
无论哪种情况,都应该查看并遵循编写跨平台代码时使用的原则。了解平台依赖项并将其隔离在间接边界之后。您希望本地化所有必须更改的代码。例如,您不希望对已知将需要更改为Windows.System.Storage调用的.NET System.IO.File API进行散布在整个代码中。相反,您希望将其本地化在一个可以稍后修改的函数中。
Bill的博客文章中还有另一篇相关内容:链接。
一些.NET API正在为WinRT进行更改。我没有详尽的列表,也不确定是否已经有一个列表。其他API未通过WinRT公开。(它们仍然作为.NET API可用,只是不作为Metro / WinRT API。)由于Windows 8进行了大量的重新架构,微软不太可能将Metro风格的应用程序框架推回到过去的版本中。
正如Pavel所说,如果您尽可能地避免使用WinRT库,那么这是可能的,但是您现在正在构建一个常规的Web应用程序。