Übergang von Windows Forms zu WPF

113

Ich bin schon lange mit der Entwicklung von Windows Forms beschäftigt (angefangen mit VB6 und bis zu C # .NET 4.5), und ich bin ziemlich an die Grenzen der Möglichkeiten von Windows Forms gestoßen, beide mit reinem .NET und Spezialeffekte mit Native Code.

Ich habe versucht, WPF und XAML zu lernen, aber ich stecke direkt beim neuen Designer von WPF fest. Die Verwendung im Vergleich zum Windows Forms-Designer scheint wirklich sehr schwierig zu sein.

Ich möchte wissen, ob es Alternativen zum WPF-Designer von .NET gibt, die besser für Windows Forms-Entwickler geeignet sind.

Matthew Layton
quelle
7
Normalerweise benutze ich den Designer nicht einmal, außer um zu überprüfen, ob das Gesamtlayout meinen Erwartungen entspricht. Am Ende schreibe ich alles von Hand in XAML und / oder verwende bei Bedarf Blend - obwohl ich kein Designer bin, so dass es kaum jemals passiert.
Patryk Ćwiek
Sie können Expression Blend verwenden, aber ich denke nicht, dass das wirklich einfacher ist, es ist mehr für Designer als für Entwickler IMO. Normalerweise schalte ich einfach die Vorschau aus und arbeite mit der XML.
BlackICE
5
Es ist nicht schwer zu bedienen, man ist einfach nicht daran gewöhnt. Die größte Hürde, die es zu überwinden gilt, ist der Paradigmenwechsel zwischen den beiden Technologien. Holen Sie sich ein gutes Buch über XAML. Sobald Sie sich an XAML gewöhnt haben, werden Sie den Designer nicht mehr verwenden - Sie geben XAML direkt ein.
Slugster
3
@ Slugster, ich habe mich darüber gewundert. Das gleiche passierte mit HTML ... Ich habe die Benutzeroberfläche mit Dreamweaver erstellt und jetzt codiere ich HTML von Hand
Matthew Layton

Antworten:

175

Ich blogge gerne über Anfängerartikel für WPF, und es gibt insbesondere einige, die Ihnen helfen können:

Zusammenfassend ist der größte Unterschied zwischen Winforms und WPF, dass in WPF Ihre Datenschicht (die DataContext) Ihre Anwendung ist, während in Winforms Ihre UI-Schicht Ihre Anwendung ist.

Anders ausgedrückt: Mit WPF besteht Ihre Anwendung aus den von Ihnen erstellten Objekten. Mithilfe von Vorlagen und anderen UI-Objekten können Sie WPF mitteilen, wie Ihre Anwendungskomponenten gezeichnet werden sollen.

Dies ist das Gegenteil von WinForms, bei dem Sie Ihre Anwendung aus UI-Objekten erstellen und diese dann mit den erforderlichen Daten versorgen.

Aus diesem Grund wird der Designer nicht so häufig verwendet, da Ihre Anwendungskomponenten in Code entworfen sind und der Designer nur eine benutzerfreundliche Oberfläche zeichnen muss, die Ihre Datenklassen widerspiegelt (normalerweise Modelsund ViewModels).

Und ich persönlich bevorzuge es, alle meine XAML-Dateien von Hand zu tippen, da sie schneller sind und nicht so viel Chaos verursachen wie der Drag / Drop-WPF-Designer, obwohl ich den Designer gelegentlich verwende, um eine Vorschau meiner Benutzeroberfläche anzuzeigen mögen.

Um Ihre Frage zu beantworten, ob es andere WPF-Designer gibt, die für WinForms-Entwickler geeignet sind, würde ich vorschlagen, statt nach einem anderen Designer zu suchen, stattdessen zu lernen, wie man WPF so verwendet, wie es verwendet werden soll. Wenn Sie WPF wie WinForms verwenden, verpassen Sie vieles, was es so großartig macht :)

Rachel
quelle
14
Stimme voll und ganz @Rachel zu. Die wichtigste Erkenntnis, wenn man sich mit WPF befasst, ist zu verstehen, dass die Benutzeroberfläche keine Daten sind, und entsprechend zu handeln.
Federico Berasategui
2
@Rachel - nur um Devil's Advocate zu spielen: Wenn Sie mit der Benutzeroberfläche beginnen (welche Schaltflächen, Textfelder usw. im Fenster angezeigt werden), können Sie die Anwendung auf das konzentrieren, was Sie tun möchten. Der Rest sind nur Implementierungsdetails, wie Sie es tun möchten.
Asaf
3
@HighCore Werfen Sie einen Blick auf stackoverflow.com/questions/982978/mvvm-for-winforms und Sie müssen anerkennen, dass Winforms nur eine View / UI-Komponente ist, in der Geschäftsobjekte an Benutzersteuerelemente gebunden werden können. Okay: WPF ist besser für MVVM geeignet, aber Winforms kann auch in einem solchen Entwurfsmuster arbeiten. Und wie Rachel sagt: "Das ist das Gegenteil von WinForms, bei dem Sie Ihre Anwendung aus UI-Objekten erstellen und diese dann mit den erforderlichen Daten versorgen." Es ist so unwahr, obwohl. Ich denke immer zumindest in einer Art von Daten und Ansichten. Daten und Winforms / WPF / HTML was auch immer.
Bernoulli IT
2
Es unterstützt die Datenbindung zumindest auf der Ebene der Dateneingabe / -änderung. Und diese 99,9999999% der Entwickler werden auch in WPF versauen, vermute ich. Aber lassen Sie uns diese Diskussion beenden. WPF ist absolut leistungsfähiger / geeignet für MVVM und eine Trennung von Bedenken, aber ich denke, Sie und auch Rachel schieben Winforms in eine negative Ecke. Besonders wenn Sie weiterhin die Wörter verwenden, die Sie verwenden ...
Bernoulli IT
3
@YoupTube Sie haben Recht, Winforms unterstützt die Datenbindung und es ist möglich, eigene benutzerdefinierte Bindungen für Fälle zu erstellen, in denen das Standardbindungssystem nicht funktioniert. Ich habe diese Antwort und meine Blog-Artikel jedoch für Anfänger geschrieben, und Anfänger denken normalerweise in UI-Komponenten, nicht in Datenobjekten. Darüber hinaus war die Bindung in WinForms nicht immer in dem Zustand vorhanden, in dem sie jetzt vorhanden ist. Daher werden viele Entwickler, die mit WinForms aufgewachsen sind oder an andere Technologien gewöhnt sind, die keine Bindungen verwenden, diesen entscheidenden Unterschied beim Wechsel häufig nicht erkennen zu einer gebundenen Architektur. :)
Rachel
9

Nun, obwohl einige Leute nicht einverstanden sind, würde ich auch empfehlen, den VS-Designer nicht zu verwenden. Zumindest nicht, um eine Schnittstelle zu erstellen. Wenn Sie einen ersten Eindruck von Ihrer Implementierung erhalten möchten, ohne die Anwendung zu starten, ist dies ein guter Viewer, zumindest solange keine anspruchsvollen Dinge wie Stylesund Templatesverwendet werden. IMHO sollte das Drag & Drop-Ergebnis jedoch nur als Prototyp verwendet und daher verworfen werden, nachdem es nicht mehr benötigt wird.

Hier sind einige Gründe, die für mich wichtig sind, es nicht zu verwenden.

  1. Der VS-Designer arbeitet mit festen Rändern und Ausrichtungen (was normalerweise nicht erforderlich ist, wenn Sie die Layout-Steuerelemente verwenden). Dies bedeutet, dass Sie viele Steuerelemente berühren müssen, wenn die Anforderungen geändert werden. Wenn Sie sich mit XAML und der WPF-Mechanik auskennen, können Sie Anwendungen erstellen, die mit geringem Aufwand hinsichtlich des Erscheinungsbilds geändert werden können.

  2. Da der Designer die XAML generiert, ist die Komposition nicht optimal und die Benutzeroberfläche kann eine schlechte Leistung erbringen. Ich habe es nicht gemessen, es ist nur ein Gefühl.

Eine viel bessere Alternative ist MS Blend , obwohl der Start alles andere als einfach ist. Das Drag & Drop-Ergebnis ist viel besser als das Ergebnis des VS-Designers.
Aber es ist ein ziemlich mächtiges Werkzeug, mit dem Sie ziemlich mächtige Elemente verwenden können, um eine hochmoderne Benutzeroberfläche zu erstellen. Ich empfehle, mindestens einen kurzen Workshop zu besuchen, um sich ein Bild von den Möglichkeiten zu machen.

Zurück zu Ihrer Frage, IMHO, und ich denke, viele Leute sind sich einig, besorgen Sie sich ein gutes Buch, zB WPF Unleashed und später, wenn Sie mehr über die Details erfahren möchten, WPF Pro . Es gibt viele Funktionen, die sich von unterscheiden Winforms. Sie werden sie mit keinem Designer kennenlernen. Ich denke, das ist der beste Ansatz.

Bitte beachten Sie auch, dass es viele Frameworks und Bibliotheken (z. B. MVVM Light , WPFToolkit ) gibt, die bereits einige häufig auftretende Probleme lösen. Es ist also nicht notwendig, das Rad neu zu erfinden.

DHN
quelle
9

Ich weiß, dass dies eine alte Frage ist, aber zum Nutzen aller anderen, die sich das ansehen, denke ich, ich sollte das Gleichgewicht ein wenig verbessern. Wenn ich einige der anderen Antworten lese, habe ich das Gefühl, dass einige der Designer den Designer nicht benutzen Das Gefühl kommt davon, es nicht richtig zu benutzen. Dieses Tutorial ist ziemlich gut, um Sie zum Laufen zu bringen und beantwortet einige der Kritikpunkte in den anderen Beiträgen.

Sie können beispielsweise vom Winforms-ähnlichen randbasierten Layout, das beim Löschen eines Steuerelements standardmäßig verwendet wird, zu einem WPF-ähnlichen Stil wechseln, indem Sie mit der rechten Maustaste klicken und "Layout zurücksetzen" auswählen.

Dieses Video deckt einen ähnlichen Bereich ab.

Ich bevorzuge immer noch den VS2010-Designer im Gleichgewicht - VS2013 scheint beim Ziehen und Ablegen auf TabItems ** (das in meinem aktuellen Projekt häufig verwendet wird) etwas fehlerhaft zu sein - aber in der VS2013-Dokumentumrissansicht können Sie auch in dieser Ansicht Dinge verschieben , was ein echtes Plus sein kann.

Um WPF und xaml optimal nutzen zu können, müssen Sie jedoch sowohl die Designer- als auch die xaml-Ansicht einigermaßen fließend beherrschen und zwischen ihnen wechseln. Wenn Sie sich vor dem Designer scheuen, verpassen Sie etwas, das Ihnen sehr helfen kann.

** Bearbeiten - obwohl dies in Update 3 für VS 2013 und in der Vorschau von VS14 verbessert worden zu sein scheint, bekomme ich bis heute manchmal immer noch merkwürdiges Verhalten.

peterG
quelle
7

Zunächst sollten Sie in WPF (XAML) in Visual Studio deisgner immer den xaml-Code verwenden, um Ihre Benutzeroberfläche zu erstellen, und Ihre Steuerung nicht per Drag & Drop verschieben! Sie müssen Ihren Code sauber halten. Sie können Expression Blend verwenden, um Ihnen zu helfen. Es ist grafischer per Drag & Drop ausgerichtet, aber nicht kostenlos.

Es ist keine große Lernkurve, aber ich denke, Sie sollten lernen, wie Sie Ihre XAML von Hand machen, anstatt nach Alternativen zu suchen.

mlemay
quelle
1
Drag-n-Drop schadet nicht, aber wenn Sie lieber tippen, ist das auch in Ordnung. Manuelles Tippen ist niemals der Schlüssel für WPF.
David
3
Wenn Sie in WPF ziehen und ablegen, sehe ich, dass Sie oft eine Menge Marge von -1200 haben und solche Dinge, die überhaupt keinen Sinn ergeben ... Ich habe es immer von Hand gemacht, es ist sicher besser
mlemay
1
Dies ist kein Thema. Stellen Sie sicher, dass Ihr Problem allen gemeinsam ist, nicht nur Ihnen. Außerdem können Sie nicht sagen, dass Drag-and-Drop schlecht ist, wenn Sie Probleme haben. Wenn Sie wissen, wie Ausdruck sowohl von Designern als auch von Entwicklern begrüßt wird, ist es immer noch erforderlich, sich auf Designer zu verlassen, und dies wird manchmal bevorzugt.
David
1
Ja, wenn Sie Ausdrucksmischung verwenden, können Sie es tun, aber ich sprach im visuellen Studio ...
mlemay
12
Ich denke, es ist eine wirklich schlechte Idee, jemandem von Forms zu raten und WPF zu starten, den Designer nicht zu verwenden. Der schnellste Weg, um XAML zu verstehen, besteht darin, Drag & Drop zu verwenden und dann den Code zu beobachten.
Ucodia
7

Ich habe diesen Prozess genauso durchlaufen wie Sie. Danach unterrichtete ich alle in meiner Firma WPF. Ich habe einige wichtige Lektionen gelernt und jeden, den ich kenne, der mit WPF arbeitet.

  1. Wenn Sie mit UI-Steuerelementen im Code dahinter arbeiten, ... dann machen Sie es falsch. Es ist absolut nicht erforderlich, dass Sie sich mit den Steuerelementen der Benutzeroberfläche im Code dahinter befassen.
  2. Sie benötigen den visuellen Entwickler nicht, um darauf zu klicken. Sie sind viel produktiver, wenn Sie sich nur mit XAML beschäftigen. Verwenden Sie Kopieren / Einfügen. Vertrauen Sie nicht auf Ihre Schreibfähigkeiten. Es wird viele Kopfschmerzen sparen.
  3. Stellen Sie sich die XAML nur als ein Fenster vor, das sich über den Daten befindet. Im Code dahinter ändern Sie die Daten. In XAML definieren Sie, wie die Benutzeroberfläche die Daten interpretiert.
  4. Konverter sind unglaublich. Sobald Sie eine Schlüsselmenge an Konvertern erhalten, wird Ihre Produktivität in die Höhe schnellen. Sie werden die Rolle der verrückten Menge von Kontroll-Eventhandlern übernehmen, die sich verstecken oder deren Größe ändern, oder was auch immer mit der Benutzeroberfläche,

Es macht die Entwicklung der Benutzeroberfläche Spaß. Besonders wenn Sie herausfinden, wie gerne Sie mit Asyc-Prozessen spielen. Es nimmt wirklich viele der Kopfschmerzen weg, die durch Winforms verursacht wurden.

user853710
quelle