Windows GUI:WPF或WinRT(2015+)

Alf*_*sen 93 c# wpf user-interface window windows-runtime

我试图了解在Windows World中构建GUI时使用的不同技术.

对于上下文,我正在构建一个小的2D平台多人游戏.(仅用于学习目的..)

我的老师说他认为WPF是正确的方法,但似乎他只将它与Windows Forms进行比较.

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

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

Windows 8 Runtime(WinRT/Windows应用商店应用程序/ Windows 10通用应用程序)与Silverlight和WPF相比如何?

  • 桌面是旧应用程序所在的位置(红色.WFP).
  • 新的应用程序类Metro应用程序可以通过多种方式构建,包括VB.NET,C#或C++.这三种语言选项可以使用XAML来构建UI.另一种方法是使用JavaScript/HTML5/CSS来开发UI和应用程序代码.

我真正的问题是:在Window World中有没有一种很好的方法来构建GUI?

如果没有,应该在Window 7,Window 8(桌面和地铁),Window Phone,(和Windows 10!)甚至x-box上使用哪些技术.

这种方式比较不同的技术吗?

您认为投入时间的正确方法是什么?

Bra*_*NET 131

这里有很多,但是这里有:

  • Windows窗体(Winforms)死了吗?不,它仍然得到积极支持.也就是说,它是一种可怕的技术(至少一旦你知道WPF的魔力)
  • 如果你想构建一个漂亮,设计精良的桌面(经典,而不是Metro)应用程序,WPF是纯.NET术语的答案.您可以使用WinRT API(例如它们的套接字类),但在Windows 8之前无法在操作系统上运行它们.UI仍然是WPF.
  • WinRT应用程序适用于Windows 8商店(它们也可在Windows 10商店中使用).您不能在此处使用WPF,也不能在桌面上使用WinRT,因此您部署的位置决定了您使用的内容.您对正确的语言/技术的理解是正确的.
  • Windows Phone 8使用WinRT的已修改运行时(在Windows 10中已更改).对于Win8/WP8,您可以使用"通用"应用程序在标准WinRT应用程序和Windows Phone应用程序之间共享大部分代码.
  • Windows 10使用基于.NET Core的通用Windows平台(UWP).为Windows 10开发的代码也可用于Xbox One,Windows Phone 10和HoloLens.WPF仍然适用于"标准"桌面应用程序.
  • XBox很棘手.XNA正在消失,微软似乎正在远离社区为该平台创建的内容.也就是说,Unity可以部署到XBox,我相信标准的DirectX(C++)开发适用于它.通用Windows平台应用程序也可以部署在Xbox One上,这似乎是微软未来的战略.

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

如果这样做,请确保学习MVVM(模型 - 视图 - 视图模型)模式.它与基于XAML的技术配合得非常好,并允许您在WPF和UWP应用程序之间共享许多逻辑.如果您最终为iOS/Android等开发Xamarin应用程序,也可以使用相同的逻辑.

请注意,对于真正的游戏开发,您需要一个真正的游戏框架(如Unity3D甚至XNA).你可以在WPF中做到这一点,这是比Winforms更好的选择,但它们都不适用于游戏.

  • 看起来VS正在寻求Unity的全力支持,所以在预测一个人方面值得称赞!:) (2认同)
  • 使用像Visual这样的WPF类的WPF渲染速度对于游戏或任何实时游戏都是可怕的. (2认同)
  • @WingerSendon查看“ RenderTransform”,“ Viewport3D”等。它们是硬件加速的。 (2认同)

Pra*_*ain 26

这是一个相当古老的线程,但就像我通过谷歌(出于兴趣)遇到这个,也许其他人也可以到达这里.这是一个新的程序员一次又一次地问的问题.现在Windows 10正式发布,我想回答一些问题.

首先,不应该再从Windows Forms开始了.它是目前最成熟的技术,但不会有任何Windows Forms的进一步发展,它现在只在维护阶段.WPF正在积极开发(最后我读过).但现在,Windows Universal Apps(WinRT one)不再需要全屏使用,并且可以像其他桌面应用程序(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将成为可能.

对于您的问题,"应该在Window 7,Window 8(桌面和地铁),Window Phone,(和Windows 10!),甚至x-box 上使用哪些技术.",单一答案是Windows Universal Apps.这就是该框架开发的确切原因.一种用于为所有设备开发应用程序的技术.桌面,平板电脑,手机(包括使用与Visual Studio 2015捆绑的Xamarin的Android),Xbox和IoT(物联网).

  • 通用应用程序似乎不适用于Windows7或Windows8."通用应用程序"仅对Win10设备"通用". (18认同)
  • WinForms仍然适用于快速和脏的GUI - WPF很好,但需要大量的样板代码(和陡峭的学习曲线)才能"正确"使用,即使没有MVVM.很糟糕的是,WPF没有真正的RAD功能 - 而且XAML只是如此危险*冗长*. (5认同)
  • @PrateekJain:在Windows 8上运行UWP应用程序时没有:http://stackoverflow.com/a/30317960/199364 (2认同)
  • 对于我的屁股的所有设备。微软再次以最好的方式发言。就像过去人们称它为跨平台一样,因为它运行在 Windows95 和 Windows2000 上。另一件事是,我从不希望桌面应用程序具有相同大小的按钮,尤其是我必须用于触摸的树和列表。因此我没有 UWP (2认同)

Tom*_*pis 23

我将尽力回答你的一个问题:

Windows Forms完全死了吗?

不,Windows表格技术并没有死.我会告诉你为什么.WPF和XAML是非常全面和复杂的技术,您可以构建非常好的UI.但!这项技术需要深入的知识.对于基本布局,您不需要太多的知识,但对于一些高级布局,您应该有深入的知识,当我开始使用这项技术并花费大量时间在谷歌上搜索一些提示.因此,当我需要一些简单的表单供用户输入时,我总是选择Windows Forms技术,这非常简单明了.这也是为什么这项技术来到世界时非常成功的原因.当你从WPF开始时,你还需要知道什么是MVVM设计模式,而一些没有经验的程序员则对此感到困惑.

  • 对于不熟悉WPF的读者,一些澄清 - 对于基本的应用程序布局,WPF需要或多或少的努力量.默认VS WPF应用程序模板提供与WinForms相同的起点.MVVM根本不是必须使用WPF,但实际上使用Binding而没有任何MVVM框架对于简单的应用程序来说也很容易.WPF在技术上更接近于WinRT和UWP,所以请您自己假设Windows Forms除了维护遗留应用程序之外别无其他. (7认同)
  • 这是我最喜欢的答案.对于小型应用程序,我使用Windows Forms,因为它非常快速,容易上手.对于复杂的生产代码,我使用C++(带有WTL)和完全侧向.NET. (3认同)
  • Winforms非常适合构建新时代的"控制台"应用程序.例如,非常基本的选项卡控件,带有一组按钮和用户输入,可以有效地将皮肤放在通常是控制台应用程序的外观上. (3认同)

Gar*_*eth 16

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


Jer*_*n S 6

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

我个人觉得沙盒(quicksanded?)的UWP商业模式令人恐惧; 它反对Windows从一开始就代表的开放性.


Jas*_*ing 5

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

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

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

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

  • 我同意 WPF 有一个强烈的学习曲线,但是一旦你克服了这一点,就再也不会回到 WinForms 了......永远。 (3认同)