首页 文章

Windows GUI:WPF或WinRT(2015)

提问于
浏览
93

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

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

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

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

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

How does Windows 8 Runtime (WinRT / Windows Store apps / Windows 10 Universal App) compare to Silverlight and 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上使用哪些技术 .

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

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

9 回答

  • 131

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

    我不会向今天开始的任何人推荐WinForms或WPF . 他们应该主要学习WinRT / XAML . 根据他们选择的语言,根据需要学习一些Win32 / .net .

    “他们说WinRT XAML用于Metro GUI构建(Window 8 tiles thing!)” - 这是一种过度抽象,它没用 . WinRT是一个运行时,就像Win32一样,它不只是用于GUI,所以“他们说”是完整的BS . XAML是一个UI层(很像WPF中的XAML),但是说它的Metro GUI也是错误的,不再有Metro GUI了 . XAML是Windows UI层 . 而“Windows 8瓷砖的东西!”是表达某些人的隧道视野 . 就像我说Win32是一个开始菜单的事情 . 你可以看到这种说法是多么荒谬 .

  • 2

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

    虽然WPF是一个非常好的学习平台,但它有一个巨大的学习曲线 . 我不认为任何具有不到5年编程经验的开发人员都可以正确地进行WPF .

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

    当然你可以说你不必做MVVM . 只需将代码置于代码中并使其正常工作即可 . 是的,这将有效,但使用WPF有什么意义?为什么不使用Win Form?

  • 4

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

  • 25

    这是一个很老的线程,但就像我通过谷歌(出于兴趣)遇到这个,也许其他人也可以到达这里 . 这是一个新的程序员一次又一次地问的问题 . 现在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(桌面和Metro),Window Phone,(和Windows 10!),甚至x-box上使用哪些技术 . ”,单一答案是Windows Universal Apps . 这就是这个框架开发的确切原因 . 一种用于为所有设备开发应用程序的技术 . 桌面,平板电脑,手机(包括使用与Visual Studio 2015捆绑的Xamarin的Android),Xbox和IoT(物联网) .

  • 16

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

    Is Windows Forms is totally dead?

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

  • 1

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

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

  • 22

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

    • 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,您可以使用"Universal"应用程序在标准WinRT应用程序和Windows Phone应用程序之间共享大部分代码 .

    • Windows 10使用基于.NET Core的通用Windows平台(UWP) . 为Windows 10开发的代码也可用于Xbox One,Windows Phone 10和HoloLens . WPF仍适用于"standard"桌面应用程序 .

    • XBox很棘手 . XNA正在消失,微软似乎正在远离社区为该平台创建的内容 . 也就是说,Unity可以部署到XBox,我相信标准的DirectX(C)开发适用于它 . 通用Windows平台应用程序也可以部署在Xbox One上,这似乎是微软未来的战略 .

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

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

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

  • 5

    这是一个老线程,但是当前.NET框架的进展,c#特性以及对作为游戏开发选择的c#的更多关注是一个重要的线程 .

    WPF几乎从未被认为是一个诚实的c#游戏平台 . WPF空域问题令人惊慌失措 . 我不认为很多(如果有的话)主要游戏或主流游戏引擎都支持WPF作为目标平台 . WPF为游戏 Launcher 提供了一个很好的平台!

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

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

    由于这是目前的PC游戏状态,WinForms是目标所有3个顶级PC平台最常见的分母 . 展望未来,UWP将成为c#游戏开发的最佳目标平台,因为Windows 7和8在Windows 10中失去了显着的市场份额,除非有新的平台可以替代它 . 所以这只是数字 .

    如果根据每个OS平台的最佳兼容性水平进行选择而不是支持最大市场份额,那么选择将更像是:

    • Windows 10:UWP

    • Windows 8.1:WinRT或Windows应用商店

    • Windows 7:WinForms

    大多数其他答案都围绕标准的Windows应用程序开发,但游戏开发是一个非常不同的领域,不同的因素将影响您的选择,例如目标操作系统以及您选择的图形API或游戏引擎实际上最支持的选项 .

  • 3

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

    我高度重新使用.Net Framework用于数据层(包括Web服务和RESTful层(JSON))和纯HTML5 / CSS3和Javascript用于您的Web表示层 .

    在Windows 10中,您可以将任何Web应用程序集成为开箱即用的城域应用程序 .

    WinRT,XAML,WPF和类似的ms东西只在Windows上运行,并且有很多限制 .

    所以一年之后我仍然很高兴我决定不将WinRT或XAML用于我的新项目 .

相关问题