Windows GUI:WPF 或 WinRT (2015+)

Windows GUI: WPF or WinRT (2015+)

我正在尝试了解不同技术的概况, 在 Windows 世界中构建 GUI 时使用。

对于上下文,我正在构建一个小型 2d 平台多人游戏。 (仅供学习..)

我的老师说他认为 WPF 是正确的方法, 但他似乎只将其与 Windows 表格进行比较。

我的理解是,在 2015 年,Windows Forms 完全死了?

在其他 stackover 问题中,他们说 WinRT+XAML 用于 Metro GUI 构建(Window 8 tiles 东西!),而且 WPF 似乎只用于桌面 Window 7/8 并且与 Silverlight 密切相关..

How does Windows 8 Runtime (WinRT / Windows Store apps / Windows 10 Universal App) compare to Silverlight and WPF?

  • The desktop is where the old apps live (red. WFP).
  • The new class of applications, Metro applications, can be built in a number of ways, including by VB.NET, C# or C++. These three language options can use XAML for building the UI. The alternative is to use JavaScript/HTML5/CSS for the development of both the UI and application code.

我真正的问题是: Window 世界上没有一种构建 GUI 的好方法吗?

如果不是,应该在 Window 7、Window 8(桌面和 Metro)、Window Phone、(以及 Windows 10!), 甚至 x-box..

是不同的技术要这样比较吗?

您认为将时间投入到什么事情上是正确的?

这里有很多,但这里有:

  • Windows Forms (Winforms) 已死?不,它仍然受到积极支持。也就是说,它是一种可怕的技术(至少一旦你了解了 WPF 的魔力)
  • 如果您想构建一个美观、设计良好的 桌面(经典,非 Metro)应用程序,WPF 是纯 .NET 术语的答案。您可以使用 WinRT API(例如它们的套接字 类),但您不能 运行 在 Windows 之前的操作系统上使用它们 8. UI 仍然是 WPF。
  • WinRT 应用适用于 Windows 8 Store(它们也可在 Windows 10 Store 中获得)。你不能在这里使用 WPF,也不能在桌面上使用 WinRT,所以你部署的地方决定了你使用什么。您对可用 languages/technologies 的理解是正确的。
  • Windows Phone 8(现已弃用)使用修改后的 运行 WinRT 时间(这在 Windows 10 中已更改)。对于 Win8/WP8,您可以使用“通用”应用在标准 WinRT 应用和 windows phone 应用之间共享 大部分 代码。
  • Windows 10 使用基于 WinRT 的通用 Windows 平台 (UWP)。为 Windows 10 开发的代码也可用于 Xbox One、Windows 10 Mobile 和 HoloLens。 WPF 仍然适用于“标准”桌面应用程序。
  • Xbox 很棘手。 XNA 已经消失,微软似乎正在远离社区为该平台创建的内容。也就是说,Unity3D 可以部署到 Xbox,我相信标准的 DirectX (C++) 开发适用于它。通用 Windows 平台应用程序也可以部署在 Xbox One 上,这似乎是微软未来的战略。
  • 截至 2021 年,WinUI 3 是一个新的 UI 框架,它将 UWP 的 UI 框架引入“桌面”应用程序。此技术可让您部署到 Windows 10 和 11。现有的 XAML UWP 应用程序通常可以通过更改为新命名空间轻松移植到 WinUI 3。如果今天开始申请,我会认真考虑走这条路。它是 Windows App SDK 的一部分。

至于花时间做什么,这取决于您的目标:)。如果您想在 .NET GUI 开发中保持“最新”,学习 WPF/UWP + XAML 会给您带来很多好处,所以这就是我想要的。 WPF 具有最多的功能,因此从那里开始,您只需找到 UWP(或任何其他基于 XAML 的技术)中缺少的解决方法。

如果这样做,请务必学习 MVVM(模型-视图-视图模型)模式。它与基于 XAML 的技术 确实 很好地工作,并允许您在 WPF 和 UWP 应用程序之间共享大量逻辑。如果您最终为 iOS/Android 等

开发 Xamarin 应用程序,也可以使用相同的逻辑

请注意,对于 true 游戏开发,您需要一个 actual 游戏框架(如 Unity3D 甚至 XNA)。您可以在 WPF 中完成,这是比 Winforms 更好的选择,但两者都不是真正适合游戏的。

WinRT 已经在桌面上运行了很长时间,我正在编写在我的桌面上运行的 WinRT。在 Windows 10 下,这些应用程序将支持非停靠位置(您可能传统上知道它们是窗口化的)。

我不会向今天开始的任何人推荐 WinForms 或 WPF。他们应该主要学习WinRT / XAML。并在需要时学习一些 Win32 / .net,具体取决于他们选择的语言..

"they say WinRT+XAML is for Metro GUI building(Window 8 tiles thing!)" -- 这太抽象了,毫无用处。 WinRT是运行时,和Win32一样,不只是GUI,所以什么"they say"完全是BS。 XAML 是一个 UI 层(很像 WPF 中的 XAML )但是说它是 Metro GUI 也是错误的,没有 Metro G[=21 这样的东西=] 了。 XAML 是 Windows UI 层。 "Windows 8 tiles thing!" 表达了某些人的狭隘视野。就像我说 Win32 是开始菜单的东西一样。可见这句话有多可笑。

这是一个相当古老的话题,但就像我通过 google(出于兴趣)运行 进入这个话题一样,也许其他人也可以到达这里。这是新程序员一再问的问题。所以我也想回答一些事情,现在 Windows 10 正式发布了。

首先,不应再从 Windows 表格开始。目前是最成熟的技术,但是Windows Forms不会有进一步的开发,目前只是在维护阶段。 WPF 正在积极开发(我最后读到)。但是现在,Windows 通用应用程序(WinRT 之一)不再需要全屏使用,可以像其他桌面应用程序(WPF 和 WinForms)一样在窗口模式下使用。这大大提高了它们在非平板电脑上的可用性。我相信这也将是桌面应用程序的未来。虽然,WPF 软件是传统的桌面应用程序(没有权限,只有 UAC)。无论哪种方式,无论您学习 WPF 还是 WinRT(使用 .Net)开发,您最终都会同时学习两者。它们都是 XAML + C#(或其他一些 .Net 语言)。当 WinRT 推出 Windows 8 时,我刚刚开始学习 WPF。我感觉很自在,只有一些你很快就会习惯的小变化。 虽然不确定 WinRT 中的 MVVM 方案(数据绑定)。我自己仍在学习 WPF 的那个方面。

Window 10 刚刚推出。 Windows 8/8.1 的成功率不如 Windows 7。因此,如果您想构建一个拥有更广泛受众的应用程序,您现在应该使用 WPF。但在不久的将来,WinRT 将是必经之路。

对于您的问题 "which technologies should one use on Window 7, Window 8(Desktop and Metro), Window Phone, (And Windows 10!), and even x-box.",唯一的答案是 Windows 通用应用程序。这就是开发此框架的确切原因。一种用于为所有设备开发应用程序的技术。台式机、平板电脑、手机(包括 Android 使用与 Visual Studio 2015 捆绑的 Xamarin)、Xbox 和 IoT(物联网)。

我将尽量只回答您的一个问题:

Windows Forms 完全死了吗?

不,Windows 表单技术并没有死。我会告诉你为什么。 WPF 和 XAML 是非常全面和复杂的技术,你可以构建非常漂亮 UI。但!这项技术需要深厚的知识。对于基本布局,你不需要那么多知识,但对于一些高级布局,你应该有很深的知识,当我开始接触这项技术时,花了很多时间在 google 上搜索一些技巧。因此,当我需要一些简单的表单供用户输入时,我总是选择 Windows 非常简单明了的表单技术。这也是这项技术问世时非常成功的原因。当你开始使用 WPF 时,你还需要知道什么是 MVVM 设计模式,一些没有经验的程序员对此感到困惑。

我 运行 大约一年前进入这个问题。我得出的结论是 XAML、WPF 和 WinRT 都是正确的开发环境。

我强烈建议将 .Net Framework 用于数据层(包括 Web 服务和 RESTful 层 (JSON)),并为您的网站使用纯 HTML5/CSS3 和 Javascript表示层。

在 Windows 10 内,您可以立即将任何 Web 应用程序集成为 Metro 应用程序。

WinRT、XAML、WPF 和类似的 ms 东西 运行 仅适用于 windows 并且有很多限制。

所以一年后我仍然很高兴我决定不为我的新项目使用 WinRT 或 XAML。

现在是 2016 年 4 月,对此仍然没有明确的答案。我们正在开发一个非常现代的实时性能监控桌面应用程序,它必须呈现多个图表和显示,并与文本和各种其他图形混合在一起。 我们的应用程序是 C#、WPF 和 .NET Framework 4.5.2,但我们仍在使用 WinForms 和 GDI+ 编写一些组件以获得可接受的性能。我们只是还没有用 WPF 实现它。我们甚至在使用 DirectX 的应用程序中开发了几个显示器,但这增加了很多复杂性,只有少数团队可以支持。我们可以通过在 WPF 中托管 WinForms 显示和 GDI+ 的速度获得简单性和纯粹的速度,从而以纯 View/ViewModel 结构的昂贵为我们提供了我们所需要的,并且必须处理各种空域问题。 我们的应用程序非常专业,我很想完全摆脱 WinForms,但不幸的是,这在我们的案例中是不可能的。 为了纯粹的性能,您需要使用 DirectX 或 WinForms。

我的两分钱...如果您想要真正的通用应用程序,即可以 运行 在包括 Windows 在内的任何桌面操作系统上运行的程序,WinForms 仍然是您的不二之选。只要确保你保持 CLR 兼容,你就可以通过 Mono 在 Mac 和 Linux 上部署。一个巨大的好处。 XAML 可能很酷,但它不会移植到其他操作系统。

我个人觉得沙盒(流沙?)UWP 商业模式很可怕;它与 Windows 从一开始就代表的开放性背道而驰。

我从事 Microsoft 技术工作已超过 10 年。我学到的最重要的事情是不要只听微软提供给你的东西。当 Microsoft 说 this 是未来时,它有 50% 的机会出错。微软肯定会尽最大努力推广他们投资的产品,但这并不意味着你应该效仿。看看 WCF 和 Silverlight 发生了什么。

虽然 WPF 是一个非常好的学习平台,但它的学习曲线很长。我认为任何少于 5 年编程经验的开发人员都不能正确地使用 WPF。

通过遵循 MVVM 模式,您会发现在 WinForm 中做一些相对容易的事情在 WPF 中变得非常具有挑战性。就像在更新后根据某些条件为单元格着色,或者在视图中滚动一行并突出显示它。

当然你可以说你不用做MVVM。只需将您的代码放在代码后面并使其工作即可。是的,这会起作用,但是使用 WPF 有什么意义呢?为什么不直接使用 Win Form?

这是一个旧话题,但对于 .NET 框架的当前进展、c# 功能以及对作为游戏开发选择的 c# 的更多关注,这是一个重要的话题。

老实说,WPF 几乎从未被选为 C# 游戏平台。 WPF 领空问题很快就吓跑了人们。由于这个原因,我认为许多(如果有的话)主要游戏或主流游戏引擎都不支持 WPF 作为目标平台。不过,WPF 为游戏启动器提供了一个很好的平台!

WinForms 虽然现在处于维护模式,但在未来几年仍将是一个有效的选择。它经过时间考验且稳定。据我所知,即使在 2017 年,WinForms 仍然是基于 c# 的游戏开发最常选择的平台。

查看 Steam Hardware Survey data 您可以看到,在撰写此答案时(2017 年 7 月),Windows 10 64 位现在是占主导地位的 PC 游戏平台,占 50% 的市场份额,其次是 Windows 7 64 位 32% 和 Windows 8.1 64 位几乎 7%。所有其他 OS 平台的市场份额都很小,除了这三个平台几乎不值得考虑。

鉴于 PC 游戏的当前状态,WinForms 是针对所有 3 个顶级 PC 平台的最常见标准。展望未来,UWP 将成为 c# 游戏开发的最佳目标平台,因为 Windows 7 和 8 将显着的市场份额输给 Windows 10,除非出现一个新的平台来取代它。所以这只是数字。

如果选择基于每个 OS 平台的最佳兼容性水平而不是支持最大市场份额,则选择更像是:

  • Windows10: UWP
  • Windows 8.1:WinRT 或 Windows 商店
  • Windows7: WinForms

大多数其他答案都围绕标准 windows 应用程序开发,但游戏开发是一个非常不同的领域,不同的因素会影响您的选择,例如目标 OS 和您选择的图形API 还是游戏引擎实际支持最好。