2010-08-11 4 views
13

Y a-t-il un pratique moyen pour nous de faire évoluer lentement une application WinForms vers WPF sans créer un cauchemar de support pour nous-mêmes avec des scénarios d'interopérabilité étranges?WinForms to WPF - Comment y arriver à partir d'ici?

Informations générales:

Nous avons une grande application WinForms gris navire de guerre qui est fortement utilisé par un groupe interne d'environ 60-75 utilisateurs. Nous commençons à courir dans des endroits où nous pourrions voir l'avantage d'avoir l'application dans WPF, mais ce n'est pas suffisant pour justifier un grand projet de le réécrire complètement. Tous les écrans de l'application sont des contrôles utilisateur WinForms autonomes et l'application WinForms est juste un shell qui gère le menu, l'ouverture/fermeture des formulaires, fournit des méthodes d'aide partagées, etc ...

Jusqu'à présent, le meilleur Nous avons eu l'idée de convertir l'application shell en WPF, puis d'héberger les contrôles utilisateur WinForms à l'intérieur. Nous avons pensé que nous pourrions ensuite convertir les contrôles utilisateur au fil du temps, en liant ces changements aux initiatives qui ont une valeur commerciale suffisante pour soutenir le travail supplémentaire. Je suis préoccupé par le fonctionnement de l'interop et son impact sur les performances. Je suis également préoccupé par la façon dont nous passons à un nouveau look pour l'application. Il semblerait bizarre de rendre l'application shell snazzy et d'avoir de vieux contrôles utilisateur de cuirassé gris hébergés à l'intérieur et il semble aussi étrange de créer l'application shell dans WPF et de la faire ressembler à WinForms.

Si l'un des frameworks Caliburn, Prism ou autre facilitait la transition, nous serions également ouverts à l'exploration de ces options.

Répondre

11

Nous étions dans une situation similaire et avons choisi le chemin suivant: Au début, nous avons commencé à héberger quelques fenêtres WPF dans le shell de l'application (toujours WinForms). Bien sûr, il y avait une différence visible, mais nous avons délibérément réduit la différence en atténuant les nouvelles fenêtres. Nous avons pensé qu'au moment où nous convertirions les fenêtres/contrôles restants, il serait plus facile de "mettre à jour" une expérience plus vivante puisque l'interface utilisateur sera entièrement WPF et nous pouvons impliquer un concepteur graphique pour travailler leur magie basée sur XAML.

Nous avons maintenant atteint le point où la majorité des fenêtres sont WPF. Nous avons commencé le processus de conversion de l'application shell WinForms en une application shell basée sur WPF hébergeant les WinForms restants. Nous avons encore une sorte de couleur terne, mais les utilisateurs ont commencé à remarquer la différence et bien que ce soit petit, nos utilisateurs apprécient toujours le changement positif incrémental. Pas trop longtemps et nous allons retirer le dernier WinForm. Ce sera le moment où nous laisserons nos concepteurs graphiques en laisse! En ce qui concerne les performances: Je ne peux certainement pas faire une déclaration générale, car cela dépend fortement de vos contrôles/fenêtres particulières. Dans notre produit (plusieurs centaines de fenêtres), nous n'avons trouvé aucun problème de performance significatif lié à la combinaison de WPF et WinForms.

Nous n'avons pas examiné les cadres, donc je crains de ne pas pouvoir les commenter.

+1

+1 décrit ce mes propres expériences très bien. En outre, voici une session PDC intéressante sur la façon dont Visual Studio 2010 a été implémenté à l'aide de NET Framework 4 interop: http://microsoftpdc.com/2009/CL09 –

+1

Je ne suis pas sûr qu'il existe une "bonne" réponse à cela, mais je pense que c'est l'approche que nous sommes le plus susceptibles de finir par prendre. –

+0

et dans tous ces efforts, payés par l'entreprise, avez-vous fourni de nouvelles fonctionnalités utiles aux utilisateurs finaux, ou avez-vous juste passé un bon moment à faire des eye-candy? – smirkingman

4

Bonne question, actuellement la plupart du travail dans WPF traite de la conversion de l'ancienne application WinForms en WPF. D'après mon expérience, le meilleur scénario est de construire l'application à partir de zéro en fonction des anciennes applications/exigences. Heureusement, j'ai fait partie d'un projet où nous avons réécrit l'application à partir de zéro et je suis sûr que cela a pris moins de temps/investissement, puis le mélange des deux.

Personnellement, je pense que cela aurait créé un gâchis si nous avions essayé de mélanger les deux. Un autre point est qu'il sera difficile de concevoir l'application mixte efficacement.

Dans mon projet actuel (qui est un projet énorme depuis 10 ans), nous convertissons l'application module par module. Heureusement pour nous, notre application se compose de diverses applications plus petites, il est donc plus facile de les convertir une par une. Dans votre cas, je dirais que vous identifiez les zones qui peuvent être totalement convertis en WPF et commencer à les construire dans WPF, comme le suggère ici -

Windows Forms - WPF interopérabilité FAQ: http://windowsclient.net/learn/integration.aspx

Je voudrais aussi suggérer utiliser certains outils pour convertir les formulaires Windows en XAML (WPF); Cela vous aidera sûrement à gagner du temps.

Windows Forms à convertisseur WPF: http://wf2wpf.codeplex.com/

Windows Forms à XAML Converter: http://www.ingeniumsoft.com/Products/WinForm2XAML/tabid/63/language/en-US/Default.aspx

Windows Forms à Windows Presentation Foundation Converter: http://www.spiderwan.com/spiderwan/ConvertWinFormToWPF/WinFormToWPF.aspx

+1

Je préfère généralement l'approche de conversion incrémentale décrite par John, mais je suis d'accord qu'il y a des moments où il est logique de réécrire à partir des exigences d'origine. Cependant, je ne suis pas du tout d'accord avec Paul G sur les outils de conversion de Windows Forms en WPF: ceux qui utilisent de tels outils finissent invariablement avec une application qui est encore plus difficile à maintenir que l'application Winforms. Correctement fait, les applications WPF sont beaucoup plus simples et plus faciles à maintenir que les Winforms équivalentes. Le temps passé à créer des modèles de vue de qualité et XAML se rendra décuplé, en particulier lors d'une réécriture. –

+0

Point pris, la conception de modèles de vue et XAML vous sera toujours mieux. Je voulais juste informer Paul des options disponibles (pour gagner du temps évidemment). – akjoshi

Questions connexes