Windows GUI:WPF或WinRT(2015+)

我正在尝试获取不同技术的概述,以便在Windows世界中构buildGUI时使用。

对于上下文,我正在构build一个二维平台的多人游戏。 (只是为了学习的目的..)

我的老师说,他认为WPF是正确的路,但他似乎只是将其与Windows窗体进行比较。

我的理解是,在2015年,Windows窗体已经完全死了?

在这个其他的stackover问题中,他们说WinRT + XAML是用于Metro GUI构build的(Window 8 tiles thing!),而且WPF似乎只用于Window 7/8中的桌面,并且与Silverlight密切相关。

Windows 8 Runtime(WinRT / Windowsapp store应用/ Windows 10通用应用)与Silverlight和WPF相比如何?

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

我真正的问题是:是不是有一个好的方法来build立窗口世界的GUI?

如果不是的话,应该在Window 7,Window 8(桌面和Metro),Window Phone(和Windows 10!)甚至是X-box上使用哪种技术。

这是不同的技术比较吗?

你认为什么是正确的投资时间?

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

  • Windows窗体(Winforms) 死了吗? 不。它仍然积极支持。 也就是说,这是一个可怕的技术(至less一旦你知道WPF的魔力)
  • 如果你想构build一个漂亮的,精心devise的桌面 (经典,而不是地铁)的应用程序,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,这似乎是微软未来的战略。

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

如果你这样做,一定要学习MVVM(模型 – 视图 – 视图模型)模式。 它适用于基于XAML的技术,允许您在WPF和UWP应用程序之间共享大量的逻辑。 如果您最终开发用于iOS / Android等的Xamarin应用程序,也可以使用相同的逻辑。

请注意,对于真正的游戏开发,您需要一个实际的游戏框架(如Unity3D甚至XNA)。 你可以在WPF中做到这一点,这是比Winforms更好的select,但都不是真正意义上的游戏。

这是一个相当古老的线索,但就像我通过谷歌(出于兴趣)碰到了,也许别人也可以到达这里。 这是一个新的程序员反复提出的问题。 所以我想回答一些事情,现在Windows 10正式发布。

首先,不应该从Windows窗体开始。 目前这是目前最成熟的技术,但是Windows Forms不会有任何进一步的发展,现在只是在维护阶段。 WPF是积极发展(最后我读)。 但现在,Windows通用应用程序(WinRT之一)不再需要全屏使用,并且可以像其他桌面应用程序(WPF和WinForms)一样在窗口模式下使用。 这在非平板电脑上增加了很多可用性。 我相信这也将是桌面应用程序的未来。 虽然,WPF软件是传统的桌面应用程序(没有权限的东西,只有UAC)。 无论哪种方式,无论你学习WPF或WinRT(使用.Net)开发,你最终都会学习。 他们都是XAML + C#(或其他.Net语言)。 当WinRT与Windows 8推出时,我只是在学习WPF。我感觉自己在家里,只有很less的小变化,你很快就习惯了。 不知道WinRT中的MVVM场景(数据绑定)。 我仍然自己学习WPF的这个方面。

Window 10刚刚推出。 Windows 8 / 8.1并没有像Windows 7那么成功。所以,如果你想构build一个拥有更多用户的应用程序,那么现在就应该使用WPF了。 但是在不远的将来,WinRT将会是一条路。

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

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

Windows窗体是完全死了吗?

不,Windows窗体技术并没有死光。 我会告诉你为什么。 WPF和XAML是非常全面和复杂的技术,你可以build立非常好的用户界面。 但! 这项技术需要深入的了解。 对于基本的布局,你不需要那么多的知识,但是对于一些高级的布局,你应该有很深的知识,当我开始使用这种技术,并花费大量时间search谷歌的一些技巧。 所以当我需要用户input一些简单的表单时,我总是select非常简单明了的Windows Forms技术。 这也是为什么这项技术在世界上非常成功的原因。 当你开始使用WPF时,你还需要知道MVVM的devise模式是什么,有些没有经验的程序员也会混淆。

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

我的两分钱…如果你想要真正的通用应用程序,也就是说可以在包括Windows在内的任何桌面操作系统上运行的程序,WinForms仍然是一种可行的方式。 只要确保你保持CLR兼容,你可以部署在Mac和Linux通过单声道。 巨大的好处。 XAML可能很酷,但不会被移植到其他操作系统。

我个人发现沙盒(quicksanded?)UWP商业模式令人恐惧; 它反映了Windows从一开始就保持的开放性。

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

我不会推荐WinForms或WPF给今天开始的任何人。 他们应该主要学习WinRT / XAML。 学习一些Win32 / .net,因为他们需要它,这取决于他们select的语言。

“他们说WinRT + XAML是用于Metro GUI的build设(Window 8瓷砖的事情!)” – 这是一个过度抽象,它没用。 WinRT是一个运行时,就像Win32一样,不仅仅是GUI,所以他们说的是完整的BS。 XAML是一个UI层(很像WPF中的XAML),但是说它的Metro GUI也是错误的,没有Metro GUI这样的东西了。 XAML是Windows UI层。 和“Windows 8瓷砖的事情!” 是expression某些人的隧道视野。 这就像我说的Win32是一个开始菜单的事情。 你可以看到这个陈述有多荒谬。

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

虽然WPF是一个非常好的学习平台,但它有一个巨大的学习曲线。 我不认为任何开发人员less于5年的编程经验可以做WPF的权利。

通过遵循MVVM模式,您会发现在WinForm中执行相对简单的操作在WPF中会变得非常具有挑战性。 像在更新之后根据某些条件对单元格着色,或者在视图中滚动一行,然后将其高亮显示。

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

这是一个古老的线程,但随着.NET框架,c#function的当前进展,以及作为游戏开发select的c#增加了重点。

WPF几乎从未被诚实地视为ac#游戏平台。 WPF空域问题让人们很快就被吓跑了。 我不认为很多(如果有的话)主要游戏引擎或主stream游戏引擎都支持WPF作为目标平台。 WPF为游戏发射器提供了一个很好的平台!

WinForms,现在处于维护模式,在未来几年仍然是一个有效的select。 这是时间testing和稳定。 从我看到的,即使在2017年,WinForms仍然是基于c#的游戏开发中最常用的平台。

看看Steam硬件调查数据,你可以看到,在写这个答案的时候(2017年7月),Windows 10 64位现在占据了PC市场份额的50%,其次是Windows 7 64位,占32%和Windows 8.1 64位接近7%。 所有其他的操作系统平台的市场份额是如此之小,除了这三个之外,几乎没有什么值得考虑的。

随着PC游戏目前的状况,WinForms是目标三大PC平台的最常见的分母。 outlook未来,UWP将成为c#游戏开发的最佳目标平台,因为Windows 7和Windows 8在Windows 10上失去了巨大的市场份额,除非有新的平台替代它。 这就是数字。

如果根据每个操作系统平台的最佳兼容性级别进行select,而不是支持最大的市场份额,那么select会更像:

  • Windows 10:UWP
  • Windows 8.1:WinRT或Windowsapp store
  • Windows 7:WinForms

其他大多数答案都围绕着标准的Windows应用程序开发,但是游戏开发是一个非常不同的领域,不同的因素会影响你的select,比如目标操作系统以及你select的graphicsAPI或者游戏引擎实际上支持的最好的select。

大约一年前我遇到过这个问题。 我得出的结论是,XAML,WPF和WinRT是否是正确的开发环境。

我高度重视使用.Net框架的数据层(包括Web服务和RESTful层(JSON))和纯HTML5 / CSS3和Javascript为您的Web表示层。

在Windows 10中,您可以直接将任何Web应用程序作为城域应用程序进行集成。

WinRT,XAML,WPF和类似的MS东西只能在Windows上运行,并有很多限制。

所以在一年之后,我仍然很高兴我决定不使用WinRT或XAML来完成我的新项目。