Transition de Windows Forms vers WPF

113

Depuis longtemps maintenant, je suis coincé avec le développement de Windows Forms (commencé avec VB6, et a continué jusqu'à C # .NET 4.5), et j'ai à peu près atteint la limite de ce que Windows Forms peut faire, tous deux en utilisant .NET pur. et des effets spéciaux avec Native Code.

J'ai essayé d'apprendre WPF et XAML, mais je reste bloqué directement au nouveau concepteur de WPF. Il semble vraiment très difficile à utiliser par rapport au concepteur Windows Forms.

Je veux savoir s'il existe des alternatives au concepteur WPF de .NET, qui conviennent mieux aux développeurs Windows Forms?

Matthew Layton
la source
7
Je n'utilise généralement même pas le concepteur, sauf pour vérifier si la mise en page générale correspond à ce à quoi je m'attendais; à la fin, j'écris tout à la main en XAML et / ou j'utilise Blend si nécessaire - même si je ne suis pas un concepteur, cela n'arrive presque jamais.
Patryk Ćwiek
Vous pouvez utiliser Expression blend, mais je ne pense pas que ce soit vraiment plus facile, c'est plus pour les concepteurs que pour les développeurs IMO. Normalement, je désactive simplement l'aperçu et travaille avec le xml.
BlackICE
5
Ce n'est pas difficile à utiliser, vous n'y êtes tout simplement pas habitué. Le plus grand obstacle à surmonter est le changement de paradigme entre les deux technologies. Procurez-vous un bon livre sur XAML, une fois que vous vous serez habitué à XAML, vous n'utiliserez même plus le concepteur - vous tapez directement XAML.
slugster
3
@slugster, je me suis posé des questions à ce sujet. La même chose s'est produite avec HTML ... J'avais l'habitude de créer l'interface utilisateur avec dreamweaver, et maintenant je code HTML à la main
Matthew Layton

Réponses:

175

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

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

Pour voir les choses d'une autre manière, avec WPF, votre application se compose des objets que vous créez et vous utilisez des modèles et d'autres objets d'interface utilisateur pour indiquer à WPF comment dessiner vos composants d'application.

C'est le contraire de WinForms où vous créez votre application à partir d'objets d'interface utilisateur, puis leur fournissez les données nécessaires.

Pour cette raison, le concepteur n'est pas vraiment utilisé car les composants de votre application sont conçus dans le code, et le concepteur est uniquement nécessaire pour dessiner une interface conviviale qui reflète vos classes de données (généralement Modelset ViewModels)

Et personnellement, je préfère taper tout mon XAML à la main car il est plus rapide et ne fait pas autant de dégâts que le concepteur WPF glisser / déposer, bien que j'utilise le concepteur à l'occasion pour prévisualiser à quoi ressemblera mon interface utilisateur comme.

Donc, pour répondre à votre 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, cherchez plutôt à apprendre à utiliser WPF de la manière dont il est censé être utilisé. Utiliser WPF comme c'est WinForms signifie que vous manquez une grande partie de ce qui le rend si génial :)

Rachel
la source
14
Tout à fait d'accord avec @Rachel. La réalisation la plus importante à la lumière de WPF est de comprendre que l' interface utilisateur n'est pas des données et d'agir en conséquence.
Federico Berasategui
2
@Rachel - juste pour jouer l'avocat du diable: commencer par l'interface utilisateur (quels boutons, zones de texte, etc. apparaissent dans la fenêtre) permet de concentrer l'application sur ce que vous voulez faire. Le reste n'est que des détails de mise en œuvre de la façon dont vous voulez le faire.
Asaf
3
@HighCore jetez un œil à stackoverflow.com/questions/982978/mvvm-for-winforms et vous devrez reconnaître que Winforms est juste un composant View / UI dans lequel les objets métier peuvent être liés aux contrôles utilisateur. D'accord: WPF est plus adapté à MVVM mais néanmoins Winforms peut également fonctionner dans un tel Design Pattern. Et comme Rachel le déclare "C'est le contraire de WinForms où vous construisez votre application à partir d'objets d'interface utilisateur, puis leur fournissez les données nécessaires." C'est tellement faux pour bien. Je pense toujours d'une manière au moins Data and View. Data et Winforms / WPF / HTML peu importe.
Bernoulli IT
2
Il prend en charge la liaison de données au moins au niveau de la saisie / modification des données. Et ces 99,9999999% de développeurs vont également gâcher WPF, je suppose. Mais terminons cette discussion. WPF est absolument plus puissant / adapté à MVVM et à une séparation des préoccupations, mais je pense que vous et Rachel poussez Winforms dans un coin négatif. Surtout quand vous continuez à utiliser les mots que vous utilisez ...
Bernoulli IT
3
@YoupTube Vous avez raison, Winforms prend en charge la liaison de données et il est possible de créer vos propres liaisons personnalisées pour les cas où le système de liaison par défaut ne fonctionnera pas non plus. J'ai cependant écrit cette réponse et mes articles de blog en pensant aux débutants, et les débutants pensent généralement en termes de composants d'interface utilisateur, pas d'objets de données. De plus, la liaison dans WinForms n'existait pas toujours dans l'état où elle existe actuellement, donc de nombreux développeurs qui ont grandi avec WinForms, ou qui sont habitués à d'autres technologies qui n'utilisent pas de liaisons, n'identifieront souvent pas cette différence clé lors du changement. à une architecture liée. :)
Rachel
9

Bien que certaines personnes ne soient pas d'accord, je recommande é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 démarrer l'application, c'est un bon visualiseur au moins tant que des éléments sophistiqués comme Styleset ne Templatessont pas utilisés. Mais, à mon humble avis, son résultat de glisser-déposer ne doit être utilisé que comme prototype et donc être jeté après qu'il n'est plus nécessaire.

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

  1. Le concepteur 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 disposition), ce qui signifie que vous devez toucher de nombreux contrôles, si les exigences sont modifiées. Si vous maîtrisez XAML et la mécanique WPF, vous pouvez créer des applications qui peuvent être modifiées avec un petit effort, en ce qui concerne l'aspect et la convivialité.

  2. Étant donné que le concepteur génère le xaml, la composition n'est pas optimale et l'interface utilisateur peut mal fonctionner. Je ne l'ai pas mesuré, c'est juste un sentiment.

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

De 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 plus tard, si vous voulez en savoir plus sur les détails, WPF Pro . Il existe de nombreuses fonctionnalités différentes de Winforms. Vous ne les connaîtrez pas en utilisant un concepteur. Je pense que c'est la meilleure approche.

Veuillez également considérer 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.

DHN
la source
9

Je sais que c'est une vieille question, mais pour le bénéfice de quiconque regarde cela, je pense que je devrais un peu rétablir l'équilibre - en lisant certaines des autres réponses, j'ai le sentiment que certaines des `` n'utilisent pas le 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 articles.

Par exemple, vous pouvez passer de la disposition basée sur les marges de type Winforms, qui est la valeur par défaut lorsque vous déposez un contrôle, à un style plus WPF-ish en cliquant avec le bouton droit et en sélectionnant `` Réinitialiser la disposition ''

Cette vidéo couvre un terrain similaire.

Je préfère toujours le concepteur VS2010 dans l'ensemble - VS2013 semble être un peu bogué lors du glisser-déposer sur TabItems **, (que mon projet actuel utilise beaucoup) - mais la vue Structure du document VS2013 vous permet également de déplacer les choses dans cette vue. , ce qui peut être un vrai plus.

Vraiment, cependant, pour tirer le meilleur parti de WPF et de xaml, vous devez maîtriser raisonnablement à la fois la vue du concepteur et la vue xaml et passer de l'une à l'autre; si vous évitez le designer, vous manquez quelque chose qui peut beaucoup vous aider.

** 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 à certains moments.

peterG
la source
7

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

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

mlemay
la source
1
Le glisser-déposer n'est pas dangereux, mais si vous préférez taper, c'est également très bien. La saisie manuelle n'est jamais la clé de WPF.
David
3
Quand vous faites glisser et déposez dans WPF, je vois que souvent, vous avez beaucoup de marge de -1200 et des choses comme ça n'ont pas du tout de sens ... Je l'ai toujours fait à la main, c'est mieux c'est sûr
mlemay
1
C'est hors sujet. Assurez-vous que votre problème est commun à tous, pas seulement à vous-même. De plus, vous ne pouvez pas dire que le glisser-déposer est mauvais, si vous rencontrez des problèmes. S'appuyer sur le concepteur est toujours nécessaire et parfois favorisé, vous verrez peut-être que c'est vrai, si vous savez comment l'expression est accueillie à la fois par le concepteur et les développeurs.
David
1
oui si vous utilisez un mélange d'expression, ok vous pouvez le faire, mais je parlais en studio visuel ...
mlemay
12
Je pense que conseiller à quelqu'un venant de Forms et démarrant WPF de ne pas utiliser le concepteur est une très mauvaise idée. Le moyen le plus rapide de comprendre XAML consiste à utiliser le glisser-déposer, puis à observer le code.
Ucodia
7

J'ai traversé ce processus comme vous l'avez fait. Ensuite, j'enseignais à tout le monde dans mon entreprise WPF. Il y a quelques leçons importantes que j'ai apprises 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 derrière, .... Alors vous le faites mal. Vous n'avez absolument pas besoin de gérer les contrôles de l'interface utilisateur dans le code derrière.
  2. Vous n'avez pas besoin du développeur visuel pour cliquer dessus. Vous êtes beaucoup plus productif en ne traitant que du XAML. Utilisez Copier / Coller. Ne vous fiez pas à vos capacités de frappe. Cela vous évitera beaucoup de maux de tête.
  3. Considérez le XAML comme une fenêtre qui regarde les données. Dans le code derrière vous modifiez les données. En XAML, vous définissez la manière dont l'interface utilisateur interprétera les données.
  4. Les convertisseurs sont incroyables. Dès que vous obtenez un nombre clé de convertisseurs, votre productivité montera en flèche à Sky. Ils prendront le rôle de la quantité folle de gestionnaires d'événements de contrôle qui masquent ou redimensionnent, ou quoi que ce soit sur 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 enlève vraiment beaucoup de maux de tête causés par Winforms.

utilisateur853710
la source