web-dev-qa-db-fra.com

Transition de Windows Forms à WPF

Cela fait longtemps que je suis coincé dans le développement de Windows Forms (commencé avec VB6 et poursuivi jusqu'à C # .NET 4.5), et j'ai pratiquement atteint la limite de ce que Windows Forms peut faire, à la fois en utilisant .NET pur. et des effets spéciaux avec Native Code.

Je sais que WPF est l’avenir (pour le moment) et que Windows Forms est en train de devenir une technologie obsolète.

J'ai essayé d'apprendre WPF et XAML, mais je suis bloqué par le nouveau concepteur de WPF ... Cela semble vraiment très difficile à utiliser par rapport au concepteur Windows Forms ... bien sûr ... c'est juste une courbe d'apprentissage, et à un moment donné, je prévois de suivre un cours pour apprendre correctement à WPF.

En attendant, je veux savoir s’il existe des alternatives au concepteur WPF de .NET, plus adaptées aux développeurs Windows Forms?

111
series0ne

J'aime bloguer sur les articles pour débutants pour WPF, et quelques-uns en particulier peuvent vous aider:

Pour résumer, la plus grande différence entre Winforms et WPF est que dans WPF, votre couche de données (le DataContext) correspond à votre application, tandis que dans Winforms, votre couche d'interface utilisateur correspond à votre application.

En d'autres termes, avec WPF, votre application comprend les objets que vous créez et vous utilisez des modèles et d'autres objets d'interface utilisateur pour indiquer à WPF comment dessiner les composants de votre application.

C'est l'inverse de WinForms où vous construisez votre application à partir d'objets d'interface utilisateur, puis leur fournissez les données nécessaires.

De ce fait, le concepteur n’est pas beaucoup utilisé, car vos composants d’application sont conçus sous forme de code et n’est nécessaire que pour dessiner une interface conviviale reflétant vos classes de données (généralement Models et ViewModels)

Et personnellement, je préfère taper tout mon code XAML à la main, car il est plus rapide et ne cause pas autant de dégâts que le concepteur glisser-déposer de WPF, même si j’utilise occasionnellement le concepteur pour avoir un aperçu de mon interface utilisateur. comme.

Donc, pour répondre à votre question sur la question de savoir s'il existe d'autres concepteurs WPF adaptés aux développeurs WinForms, je suggérerais qu'au lieu de chercher un autre concepteur, vous devriez plutôt apprendre à utiliser WPF de la manière dont il est censé être utilisé. Utiliser WPF comme si c'était WinForms, c'est rater une grande partie de ce qui le rend si génial :)

174
Rachel

Je sais que c’est une vieille question, mais pour le bénéfice de tous ceux qui la regardent, je pense que je devrais redresser un peu l’équilibre - en lisant certaines des autres réponses, j’ai le sentiment que certains ne font pas appel au concepteur. "Le sentiment vient de ne pas l'utiliser correctement. Ce tutoriel est assez bon pour vous lancer et répond à certaines des critiques dans les autres posts.

Par exemple, vous pouvez basculer de la présentation basée sur les marges semblable à Winforms qui est la valeur par défaut lorsque vous supprimez un contrôle, à un style plus WPF-ish en cliquant avec le bouton droit de la souris et en sélectionnant "Réinitialiser la présentation".

Cette vidéo couvre un terrain similaire.

Je préfère toujours le concepteur VS2010 dans l'ensemble - VS2013 semble être un peu buggé lorsque vous glissez-déposez-le sur TabItems ** (que mon projet actuel utilise beaucoup) - mais la vue Structure du document VS2013 vous permet également de déplacer des éléments dans cette vue. , ce qui peut être un réel plus.

En réalité, cependant, pour tirer le meilleur parti de WPF et de xaml, vous devez maîtriser à la fois la vue du concepteur et celle de xaml et basculer entre eux. si vous craignez le designer, vous ratez quelque chose qui peut vous aider beaucoup.

** Modifier - bien que cela semble avoir été amélioré dans la mise à jour 3 pour VS 2013, et dans les aperçus de VS14, à ce jour, j'ai toujours un comportement étrange par moments.

9
peterG

Bien que certaines personnes ne soient pas d’accord, je recommanderais également de ne pas utiliser le concepteur VS. Du moins pas pour créer une interface. Si vous souhaitez avoir une première impression de votre implémentation sans lancer l'application, c'est un bon téléspectateur, du moins aussi longtemps qu'aucun objet sophistiqué comme Styles et Templates ne soit utilisé. Mais, à mon humble avis, son résultat par glisser-déposer ne doit être utilisé que comme prototype et doit donc être ignoré après qu’il n’est plus nécessaire.

Voici quelques raisons qui sont importantes pour moi de ne pas l'utiliser.

  1. Le concepteur de VS travaille avec des marges et des alignements fixes (ce qui n'est généralement pas nécessaire si vous utilisez les contrôles de présentation), ce qui signifie que vous devez toucher de nombreux contrôles si les exigences sont modifiées. Si vous êtes au cœur de la mécanique XAML et WPF, vous pouvez créer une application modifiable avec un minimum d'effort, en ce qui concerne l'aspect et la convivialité.

  2. Puisque le concepteur génère le xaml, la composition n'est pas optimale et l'interface utilisateur risque de mal fonctionner. Je ne l'ai pas mesuré, c'est juste un sentiment.

Une meilleure alternative est MS Blend , bien que le début soit tout sauf simple. Son résultat par glisser-déposer est bien meilleur que le résultat du concepteur de VS.
Mais c’est un outil assez puissant qui vous aide à utiliser des éléments assez puissants pour créer une interface utilisateur de pointe. Je recommande de visiter au moins un court atelier pour avoir une idée de ses opportunités.

Retour à votre question, à mon humble avis, et je pense que beaucoup de gens sont d’accord, procurez-vous un bon livre, par exemple. WPF Unleashed et ultérieurement, si vous voulez en savoir plus sur les détails, WPF Pro . Il y a beaucoup de fonctionnalités qui diffèrent de Winforms. Vous ne pourrez pas les connaître en utilisant un concepteur. Je pense que c'est la meilleure approche.

Notez également qu’il existe de nombreux frameworks et bibliothèques (par exemple MVVM light , WPFToolkit ), qui résolvent déjà certains problèmes courants. Il n'est donc pas nécessaire de réinventer la roue.

9
DHN

J'ai suivi ce processus comme vous l'avez fait. Ensuite, j'enseignais à tous les membres de mon entreprise WPF. J'ai appris quelques leçons importantes et toutes les personnes que je connais qui travaillent avec WPF.

  1. Si vous travaillez avec des contrôles d'interface utilisateur dans le code situé derrière, .... alors vous le faites mal. Vous n'avez absolument pas besoin de vous occuper des contrôles de l'interface utilisateur dans le code précédent.
  2. Vous n'avez pas besoin du développeur visuel pour cliquer dessus. Vous êtes beaucoup plus productif si vous n’utilisez que le XAML. Utilisez Copier/Coller. Ne faites pas confiance à vos capacités de frappe. Cela évitera beaucoup de maux de tête.
  3. Pensez au XAML juste comme une fenêtre qui regarde les données. Dans le code, vous modifiez les données. En XAML, vous définissez comment l’interface utilisateur interprétera les données.
  4. Les convertisseurs sont incroyables. Dès que vous obtiendrez un nombre important de convertisseurs, votre productivité atteindra des sommets. Ils assumeront le rôle de la quantité folle de gestionnaires d'événements de contrôle qui masquent ou redimensionnent, ou quoi que ce soit à propos de l'interface utilisateur,

Cela rend le développement de l'interface utilisateur amusant. Surtout une fois que vous découvrez comment il aime jouer avec les processus Asyc. Cela élimine beaucoup de maux de tête causés par Winforms.

7
user853710

Tout d'abord, dans WPF (XAML) dans Visual Studio deisgner, vous devez toujours utiliser le code xaml pour construire votre interface utilisateur et ne pas vous laisser glisser par contrôle! Vous devez garder votre code propre. Vous pouvez utiliser Expression Blend pour vous aider. Le glisser-déposer est plus graphique, mais ce n’est pas gratuit.

Ce n'est pas une grosse courbe d'apprentissage, mais je pense que vous devriez apprendre à faire votre xaml à la main au lieu de chercher une alternative.

7
mlemay