【问题标题】:WinRT and WPF in Windows 8Windows 8 中的 WinRT 和 WPF
【发布时间】:2011-12-03 14:06:59
【问题描述】:

据我了解,WinRT 是不使用底层 Win32 API 编写的不同版本的 WPF。

WinRT和WPF是什么关系? WPF 会在 Windows 7 中的 Metro 下运行,还是会启动经典桌面?

这在主题演讲中并不是很清楚。如果有人安装了 Windows 8,则可以确认其行为。

谢谢

【问题讨论】:

  • 当您来自 WPF 时,预计情况会更糟。很多东西都被删除了..

标签: wpf windows-8 windows-runtime


【解决方案1】:

WinRT 是 Winapi 的替代品。该 api 是本机的,与作为 CLR 之上的一个层运行的 WPF 非常不同。它当然类似于 WPF,这是导致混淆的部分原因。它采用托管代码的元数据格式,取代了旧的类型库。并且使用 XAML 进行 UI 设计,很像 WPF、Silverlight 和 Windows Phone。您仍然可以为 Windows 8 编写 WPF 应用程序,但您的应用程序不能通过商店发布,不能与 Metro 桌面集成,也不能在基于 ARM 内核的平板电脑上运行。这是否是一个真正的问题在很大程度上取决于 Metro 在市场上的表现。

【讨论】:

    【解决方案2】:

    WPF 和 WinRT 之间没有关系,就像 Silverlight 和 WPF 之间没有关系一样。现在我们拥有三种技术,WPF、Silverlight 和 WinRT。

    如果您尝试执行 WPF 应用程序,它不会在 Metro 上执行,它只会在经典桌面上执行。

    在 Visual Studio 2011 中,您将 WPF 和 Metro 作为两种不同类型的应用程序,而用于 WPF 和 WinRT 的 Xaml 并不相同,用于 WinRT 的 Xaml 与 Silverlight 几乎相同,因为 WPF 存在的许多类是WinRT 库中缺少。但大多数 Silverlight 存在的类在 WinRT 中可用。

    【讨论】:

      【解决方案3】:

      Windows 运行时 (WinRT) 是用于创建 Metro 应用程序的替代 API (以及后来的服务器应用程序)。

      API 是基于类/方法/结构的,适用于 .Net Metro 应用程序、html5/css3/javascript 应用程序和 C/C++ Metro 应用程序。

      实现是原生的。

      API 通过 .winmd 文件可见,其中包含的元数据与 .Net 程序集中的元数据非常相似。

      这些 API 旨在保护和异步友好,因为许多 API 需要使用 async/await,因为它们可能需要超过 50 毫秒才能执行。

      它包括 Win32 API 和 COM api 的子集。

      无论如何...以下链接帮助...频道9也有一些//Build/有关该主题的视频..

      Metro 风格的应用程序开发 - http://msdn.microsoft.com/en-us/windows/apps/

      用于 Metro 风格应用的 Win32 和 COM - http://msdn.microsoft.com/en-us/library/windows/apps/br205757(v=VS.85).aspx

      Metro 风格应用的 API - http://msdn.microsoft.com/en-us/library/windows/apps/br211369(v=VS.85).aspx

      【讨论】:

        【解决方案4】:

        WinRT 是一个新库,您可以使用 XAML,但不能使用 WPF。

        WPF 主要使用 DirectX 进行视觉处理。

        您可以将 WinRT 用于:

        • XAML
          • C#
          • C++
          • VB.NET
        • HTML/JS/CSS

        【讨论】:

        • WPF 是切换到经典桌面还是在 Metro 下工作?谢谢
        • WPF 用于桌面应用程序,而不是 Metro。 Metro 应用程序必须使用 WinRT 编写 AFAIK。
        • 但是我们应该能够轻松地将我们的 WPF 模型和视图模型移植到 WinRT 上,并且只需要重写我们的视图?
        • 如果您使用可移植类库,我认为这就是目的。
        【解决方案5】:

        WinRT 是一种基于 COM 接口的非托管 API。您可以通过调用 .winmd 元数据文件(Windows\System32\WinMedataData 目录)中的对象来使用它。

        所有命名空间都以“Windows”开头。

        您可以使用 XAML 文件编写 Windows 8 应用程序,但这是 WPF 的唯一共同点。

        【讨论】:

          猜你喜欢
          • 2012-08-13
          • 1970-01-01
          • 2012-09-27
          • 2012-10-11
          • 2011-11-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多