web-dev-qa-db-fra.com

Interface graphique Windows: WPF ou WinRT (2015+)

J'essaie d'obtenir un aperçu des différentes technologies à utiliser lors de la création d'interfaces graphiques dans Windows World.

Pour le contexte, je construis un petit jeu multijoueur 2d plate-forme. (Juste pour le but d'apprendre ..)

Mon professeur dit qu'il pense que WPF est la bonne solution, mais il semble qu'il ne la compare qu'à Windows Forms.

À ce que je sache, en 2015, Windows Forms est totalement mort?

Dans cette autre question de stackover, ils disent que WinRT + XAML est destiné à la construction d'une interface graphique Metro (chose de Window 8!), Et qu'il semble que WPF soit utilisé uniquement pour le bureau dans Windows 7/8 et qu'il soit proche de Silverlight.

Comment Windows Runtime (WinRT/Windows Store/Windows 10 Universal App) se compare-t-il à Silverlight et WPF?

  • Le bureau est le lieu de vie des anciennes applications (rouge. WFP).
  • La nouvelle classe d'applications, les applications Metro, peut être construite de différentes manières, notamment avec VB.NET, C # ou C++. Ces trois options de langue peuvent utiliser XAML pour créer l’UI. L'alternative consiste à utiliser JavaScript/HTML5/CSS pour le développement de l'interface utilisateur et du code d'application.

Ma vraie question est la suivante: n’est-il pas UN bon moyen de construire des interfaces graphiques dans le monde de la fenêtre?

Et si non, quelles technologies utiliser sur Windows 7, Windows 8 (Desktop et Metro), Windows Phone, (et Windows 10!) Et même x-box ..

Est-ce à différentes technologies à comparer de cette façon?

Selon vous, quelle est la bonne chose pour investir du temps?

93
Alf Nielsen

Il y en a beaucoup ici, mais voici:

  • Windows Forms (Winforms) est-il mort ? Non, il est toujours activement soutenu. Ceci dit, c’est une technologie horrible à utiliser (au moins une fois que vous connaissez la magie de WPF)
  • Si vous voulez créer une application agréable, bien conçue desktop (classique, pas Metro), WPF est la solution en termes purement .NET. Vous pouvez == utilisez les API WinRT (telles que leurs classes de socket), mais vous ne pouvez pas les exécuter sur des systèmes d'exploitation antérieurs à Windows 8. L'interface utilisateur est toujours WPF.
  • Les applications WinRT sont destinées au magasin Windows 8 (elles sont également disponibles au magasin Windows 10). Vous ne pouvez pas utiliser WPF ici ou WinRT sur le bureau. Le lieu de déploiement détermine ce que vous utilisez. Vous avez raison dans votre compréhension des langues/technologies disponibles.
  • Windows Phone 8 utilise un environnement d'exécution modifié de WinRT (celui-ci a été modifié dans Windows 10). Pour Win8/WP8, vous pouvez utiliser des applications "universelles" pour partager most du code entre une application WinRT standard et une application Windows Phone.
  • Windows 10 utilise la plate-forme universelle Windows (UWP), basée sur .NET Core. Le code développé pour Windows 10 peut également être utilisé sur Xbox One, Windows Phone 10 et HoloLens. WPF est toujours pour les applications de bureau "standard".
  • La Xbox est délicate. XNA s'en va et Microsoft semble s'éloigner du contenu créé par la communauté pour la plate-forme. Cela dit, Unity peut se déployer sur XBox et je pense que le développement standard DirectX (C++) fonctionne pour elle. Les applications de la plate-forme Windows universelle peuvent également être déployées sur la Xbox One, et cela semble être la stratégie de Microsoft pour l'avenir.

Pour ce qui est de passer du temps, cela dépend de ce que vous ciblez :). L'apprentissage de WPF/UWP + XAML vous apportera de nombreux avantages si vous souhaitez rester "actuel" dans le développement d'une interface graphique .NET, c'est donc ce que je rechercherais. WPF a la plupart des fonctionnalités, donc en commençant par là, il vous suffit de trouver des solutions de contournement pour ce qui manque dans UWP (ou tout autre technologie basée sur XAML).

Si vous faites cela, assurez-vous d'apprendre le modèle MVVM (Model-View-View Model). Cela fonctionne vraiment bien avec les technologies basées sur XAML et vous permet de partager beaucoup de logique entre vos applications WPF et UWP. La même logique peut également être utilisée si vous développez des applications Xamarin pour iOS/Android, etc.

Notez que pour le développement de jeux de true , vous aurez besoin d'un framework de jeu actuel (comme Unity3D ou même XNA). Vous pouvez le faire dans WPF, et c'est un meilleur choix que Winforms, mais ni l'un ni l'autre ne sont vraiment destinés aux jeux.

132
BradleyDotNET

C'est un sujet assez ancien, mais comme je l'ai rencontré par google (par intérêt), quelqu'un d'autre pourrait peut-être arriver ici aussi. C'est une question qui est posée encore et encore par les nouveaux programmeurs. J'aimerais donc répondre à quelques questions aussi, maintenant que Windows 10 est officiellement publié.

Tout d'abord, il ne faut plus commencer avec Windows Forms. C'est la technologie la plus mature pour le moment, mais il n'y aura plus de développement de Windows Forms, c'est seulement en phase de maintenance. WPF est activement développé (dernière fois que j'ai lu). Mais à présent, les applications universelles Windows (WinRT one) ne doivent plus être utilisées en plein écran et peuvent être utilisées en mode fenêtré, tout comme les autres applications de bureau (WPF et WinForms). Cela augmente beaucoup leur utilisation sur des ordinateurs autres que des tablettes. Je crois que ce sera également l'avenir pour les applications de bureau. Bien que les logiciels WPF soient les applications de bureau traditionnelles (sans aucune autorisation, seulement UAC). Quoi qu’il en soit, que vous appreniez le développement WPF ou WinRT (avec l’utilisation de .Net), vous finirez par apprendre les deux. Ils sont tous deux XAML + C # (ou un autre langage .Net). J'étais en train d'apprendre WPF lorsque WinRT est sorti avec Windows 8. Je me sentais comme à la maison, avec seulement quelques modifications mineures auxquelles vous vous habituez très vite. Pas sûr du scénario MVVM (liaison de données) dans WinRT cependant. J'apprends toujours cet aspect de WPF moi-même.

Window 10 vient d'être lancé. Windows 8/8.1 n'a pas connu autant de succès que Windows 7. Donc, si vous souhaitez créer une application destinée à un public plus large, optez pour WPF pour le moment. Mais dans un avenir proche, WinRT sera la solution.

Pour votre question, "quelles technologies doit-on utiliser sur Fenêtre 7, Windows 8 (Desktop et Metro), Windows Phone ((et Windows 10!) Et même x-box. ", La réponse unique est Windows Universal Apps. C’est la raison exacte pour laquelle ce cadre a été développé. Une technologie à utiliser pour développer des applications pour tous les appareils: ordinateurs de bureau, tablettes et téléphones (y compris Android à l'aide de Xamarin fourni avec Visual Studio 2015), Xbox et IoT (Internet of Things).

26
Prateek Jain

Je vais essayer de répondre à une seule de vos questions:

Windows Forms est-il totalement mort?

Non, la technologie des formulaires Windows n'est pas morte. Je vais vous dire pourquoi. WPF et XAML sont une technologie très complète et complexe et vous pouvez construire une interface utilisateur très agréable. Mais! Cette technologie nécessite une connaissance approfondie. Pour les mises en page de base, vous n'avez pas besoin de beaucoup de connaissances, mais pour certaines mises en page avancées, vous devez avoir des connaissances approfondies. Lorsque j'ai commencé à utiliser cette technologie, j'ai passé beaucoup de temps à chercher des astuces sur Google. Ainsi, lorsque j’ai besoin de quelques formulaires simples pour la saisie des utilisateurs, je choisis toujours la technologie Windows Forms, qui est très simple et directe. C'est aussi la raison pour laquelle cette technologie a eu beaucoup de succès lorsqu'elle est venue au monde. Lorsque vous démarrez avec WPF, vous devez également savoir quel est le modèle de conception de MVVM, ce que certains programmeurs non expérimentés confondent.

22
Tomáš Opis

Nous sommes en avril 2016 et il n'y a toujours pas de réponse claire à cette question. Nous développons actuellement une application de bureau très moderne de contrôle des performances en temps réel qui doit générer plusieurs graphiques et affichages, mélangés à du texte et à d’autres graphiques. Notre application est C #, WPF avec .NET Framework 4.5.2 mais nous écrivons encore certains composants en utilisant WinForms et GDI + pour obtenir des performances acceptables. Nous ne l'avons tout simplement pas atteint avec WPF. Nous avons même développé quelques écrans dans l’application avec DirectX, mais cela ajoute beaucoup de complexité que seule une partie de l’équipe peut prendre en charge. La simplicité et la vitesse pure que nous pouvons obtenir en hébergeant un affichage WinForms au sein de WPF et la vitesse de GDI + nous donnent ce dont nous avons besoin au prix onéreux de la structure View/ViewModel pure et devons faire face à divers problèmes d’espace aérien. Notre application est assez spécialisée et j'aimerais bien éliminer complètement WinForm, mais malheureusement, ce n'est pas encore possible dans notre cas. Pour des performances pures, vous devrez utiliser soit DirectX, soit WinForms.

16
Gareth

Mes deux cents ... Si vous voulez de véritables applications universelles, c'est-à-dire des programmes pouvant fonctionner sur TOUT système d'exploitation de bureau, y compris Windows, WinForms est toujours la solution. Assurez-vous simplement de rester compatible avec le CLR et de pouvoir déployer sur Mac et Linux via Mono. Un énorme avantage. XAML est peut-être cool, mais il ne sera pas porté sur d'autres systèmes d'exploitation.

Personnellement, je trouve terrifiant le modèle d’entreprise UWP en bac à sable (sables mouvants?); cela contredit l'ouverture que Windows défend depuis le tout début.

5
Jeroen S

C’est un vieux fil de discussion, mais important avec les progrès actuels du framework .NET, des fonctionnalités de c # et de l’attention accrue portée à c # en tant que choix de développement de jeu.

En toute honnêteté, WPF n’est presque jamais choisi comme plate-forme de jeu c #. Les problèmes d'espace aérien de WPF ont effrayé les gens assez rapidement. Pour cette raison, je ne pense pas que beaucoup de grands titres ou de moteurs de jeu principaux supportent WPF comme plate-forme cible. WPF est une excellente plateforme pour les lanceurs de jeux!

WinForms, bien que maintenant en mode maintenance, restera un choix valable pour les années à venir. C'est éprouvé et stable. D'après ce que j'ai vu, même en 2017, WinForms est toujours la plate-forme la plus courante choisie pour le développement de jeux sur C #.

En regardant données du Steam Hardware Survey , vous pouvez constater qu’au moment de la rédaction de cette réponse (juillet 2017), Windows 10 64 bits est désormais la plate-forme de jeux pour PC dominante avec une part de marché de 50%, suivie de Windows. 7 64 bits à 32% et Windows 8.1 64 bits à près de 7%. La part de marché de toutes les autres plates-formes d’exploitation est si petite qu’il est presque inutile d’envisager autre chose que ces trois-là.

WinForms étant l’état actuel du jeu sur PC, le dénominateur le plus courant est destiné aux trois principales plates-formes PC. À l'avenir, UWP sera la meilleure plate-forme cible pour le développement de jeux c #, car Windows 7 et 8 perdent une part de marché importante au détriment de Windows 10, à moins qu'une nouvelle plate-forme ne la remplace. Donc, ce n'est que par les chiffres.

Si vous optez pour le meilleur niveau de compatibilité par plate-forme OS au lieu de prendre en charge une part de marché maximale, les choix se présenteraient plutôt:

  • Windows 10: UWP
  • Windows 8.1: WinRT ou Windows Store
  • Windows 7: WinForms

La plupart des autres réponses portent sur le développement d'applications Windows standard, mais le développement de jeux est un domaine très différent et différents facteurs vont influer sur vos choix, tels que le système d'exploitation cible et les choix de l'API graphique ou du moteur de jeu pris en charge.

4
Mike Johnson

WinRT est sur le bureau depuis longtemps, j'écris WinRT, qui tourne sur mon bureau. Et sous Windows 10, ces applications prendront en charge les emplacements non ancrés (comme vous les connaissez habituellement).

Je ne recommanderais pas WinForms ou WPF à ceux qui commencent aujourd'hui. Ils devraient apprendre principalement WinRT/XAML. Et apprenez quelques Win32/.net selon leurs besoins, en fonction de la langue de leur choix.

"Ils disent que WinRT + XAML est destiné à la construction d'une interface graphique Metro (ce que vous ferez de la fenêtre 8!)" - C'est une telle abstraction, qu'elle est inutile. WinRT est un runtime, comme Win32, ce n’est pas juste pour l’interface graphique, alors ce qu’ils "disent" est une BS complète. XAML est une couche d'interface utilisateur (un peu comme XAML dans WPF), mais dire que son interface graphique Metro est également fausse, il n'existe plus de telle interface. XAML est la couche d'interface utilisateur Windows. Et "Windows 8 tuiles chose!" exprime la vision tunnel de certains peuples. Ce serait comme si je disais que Win32 est une chose du menu de démarrage. Vous pouvez voir à quel point cette déclaration est ridicule.

3
Gavin Williams

Je travaille avec les technologies Microsoft depuis 10 ans. La chose la plus importante que j'ai apprise n’est pas d’écouter ce que Microsoft vous propose. Lorsque Microsoft dit ceci est l'avenir, il a 50% de chance de se tromper. Certes, Microsoft fera de son mieux pour promouvoir les produits sur lesquels il a investi, mais cela ne veut pas dire que vous devriez suivre. Voyez ce qui arrive à WCF et Silverlight.

Bien que WPF soit une plate-forme très agréable à apprendre, sa courbe d'apprentissage est énorme. Je ne pense pas qu'un développeur avec moins de 5 ans d'expérience en programmation puisse faire correctement WPF.

En suivant le modèle MVVM, vous constaterez que faire quelque chose de relativement facile dans WinForm peut devenir très difficile dans WPF. Par exemple, colorez une cellule en fonction de certaines conditions après une mise à jour ou faites défiler une ligne dans la vue pour la mettre en évidence.

Bien sûr, vous pouvez dire que vous n’avez pas à utiliser MVVM. Il suffit de mettre votre code dans le code derrière et de le faire fonctionner. Oui, cela fonctionnera, mais quel est l'intérêt d'utiliser WPF? Pourquoi ne pas simplement utiliser Win Form?

2
Jason Ching

Je me heurte à cette question il y a environ un an. Je suis parvenu à la conclusion que l’environnement de développement correct pour commencer était XAML, WPF ou WinRT.

Je recommande vivement d’utiliser .Net Framework pour la couche de données (y compris les services Web et la couche RESTful (JSON)) et les formats HTML5/CSS3 et Javascript purs pour votre couche de présentation Web.

Sous Windows 10, vous pouvez intégrer n'importe quelle application Web en tant qu'application de métro prête à l'emploi.

WinRT, XAML, WPF et autres fichiers MS similaires ne fonctionnent que sous Windows et ont beaucoup de limites.

Donc, après un an, je suis toujours très heureux de ma décision de ne pas utiliser WinRT ou XAML pour mon nouveau projet.

1
Khamis