Top Banner
Von WinForms nach WPF Tipps zu Hybrid-Anwendungen Stefan Lange | empira Software GmbH [email protected] 25.02.2010
37

Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Sep 11, 2019

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Von WinFormsnach WPFTipps zu Hybrid-Anwendungen

Stefan Lange | empira Software GmbH

[email protected] 25.02.2010

Page 2: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Agenda

Tipps zu den folgenden Punkten:

• Entscheidungen und Vorgehensweise

• WPF in WinForms Integration

• WinForms in WPF Integration

• Typische Probleme und Lösungsansätze

• Anwendungsarchitektur

• Fragen/Diskussion

Page 3: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Vorüberlegungen

Migrieren oder neu schreiben?

• Genaue Analyse durchführen

• Wo steht man?

• Wo will man hin?

• Ressourcen und Kenntnisstand der Entwickler

• Keine ad-hoc Entscheidungen treffen

Page 4: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Vorteile WPF (vs. WinForms)

• Bessere Trennung von UI und Code

• Datenbinding (MVVM) sehr produktiv

• Validierung

• Templates und Styles

• Gute externe Control Libraries verfügbar

• (Neue Features: Animation, 3D, Video, …)

• Hardwarebeschleunigt

Page 5: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Nachteile WPF (vs. WinForms)

• WPF vermeintlich komplizierter

• Erhöhte Hardwareanforderungen

• Leider immer noch: Probleme mit

Terminalserver-Lösungen von Drittanbietern

Page 6: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Vorteile WinForms (vs. WPF)

• Breitere Entwicklergemeinde

• .NET 2.0 ist im Prinzip noch ausreichend

Page 7: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Nachteile WinForms (vs. WPF)

• „Technisches Auslaufmodell“

• GDI+ wird im Prinzip nicht weiterentwickelt

• Microsoft selbst verwendet es nicht mehr für

neue Produkte

Page 8: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Umstieg: Wie fängt man an?

Fragen stellen:

• Analyse: Wo will man eigentlich hin?

• Entscheidung hängt stark von der konkreten

Anwendung / den konkreten Rahmenbedingungen

ab

• Pro und contra in Bezug auf die nächste

Produktversion abwägen

Page 9: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Option: Bei WinForms bleiben

Vorteile

• Es ändert sich gar nichts (= bequem)

• Kein vorübergehender Produktivitätseinbruch

• Kein .NET Update beim Kunden

Page 10: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Option: Bei WinForms bleiben

Nachteile

• Ggf. Zeitdruck, wenn man doch umsteigen muss/will

(z.B. wegen neuer Features)

• Verliert ggf. Anschluss an WPF & Silverlight

Page 11: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Option: Mit WPF neu schreiben

Vorteile

• Geringster Gesamtaufwand der WPF-Version

• Konsistentes UI und Applikations-Modell

• Alle WPF Features können unmittelbar genutzt

werden

Wenn man die Möglichkeit dazu hat, dann mit WPF ein neues keines Projekt starten!

Page 12: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Option: Mit WPF neu schreiben

Nachteile

• Dauert am längsten bis zur fertigen Version

• Sehr steile Lernkurve

• Bei größeren Anwendungen oft nicht praktikabel

Page 13: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Option: Hybride Anwendung

Mischung von beiden Welten

• Manche Teile werden mit WPF erweitert

• Andere Teile bleiben WinForms

• „Sanfter“ und ggf. unsichtbarer Übergang

• Vermeidung des „Second System Effects“

Page 14: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Beispiel: Visual Studio 2010

rot = WinForms bzw. natives Win32

Page 15: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Beispiel: RibbonWindow

WPF Frame mit WinForms Content

Page 16: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Hybride Anwendung

Vorteile

• Entwickler lernen WPF Schritt für Schritt

• Kurzer Zeitraum bis zur ersten Version

• Compiler-technisch unproblematisch: Einfach WPF

und WinForms Assemblies referenzieren

Page 17: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Hybride Anwendung

Nachteile

• Ggf. nicht ganz konsistentes UI

• Man kann auf sehr komplexe Probleme stoßen

(Interop, Applikations-Modell, …)

Page 18: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

1. WinForms mit WPF erweitern

Teilkomponenten auf WPF Basis

• Neue modale Dialoge

• Spezielle UserControls

• Grafischer Editor

• Dokumentgenerierung / Vorschau / Druck

• XPS Dokumente generieren

Page 19: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

WPF in WinForms Control

ElementHost regelt Interop

WinForms UserControl

ElementHost

WPF UserControl

Page 20: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

DEMO

• WPF Dialog-Boxes in WinForms

• WPF UserControls in WinForms

Page 21: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Tipps zur WPF-Einbettung

• Modale Dialoge funktionieren „einfach so“

• UserControls benötigen ElementHost

• Modeless Dialoge vermeiden

Wichtig

• Wenn es mit ElementHost nicht sofort funktioniert,

nicht weiter rumprobieren

Page 22: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

2. MainWindow wird WPF

Teilkomponenten bleiben WinForms

• Hauptfenster kann beispielsweise Ribbons

verwenden

• Besseres „Workspace Layout“ möglich

• Einzelne Dialoge und UserControls bleiben in

WinForms

• UI kann Stück für Stück erneuert werden

Page 23: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

WinForms in WPF Control

WindowsFormsHost regelt Interop

WPF Control/UIElement

WindowsFormsHost

WinForms UserControl

<WindowsFormsHost x:Name="winFormsHost" Margin="12" ><wf:WinFormsSampleUserControl1 />

</WindowsFormsHost>

Cool: WinForms Objekt wird in XAML angelegt

Page 24: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Beispiel mit AvalonDock

WPF MainWindow ähnlich Visual Studio

WinForms UserControl

Page 25: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

WinForms in WPF einbetten

DEMO

• Main Window mit Avalon Dock

• WinForms Dialoge aufrufen

• UserControls in WPF Controls einbetten

Page 26: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Tipps zur WinForms-Einbettung

• Modale Dialoge funktionieren „einfach so“

• WindowsFormsHost für UserControls

• Modeless Dialoge vermeiden

• WindowsFormsHost/ElementHost Verschachtelung vermeiden

(wird sehr langsam)

Page 27: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

WARNUNG

Es ist komplizierter als es aussieht!

• Tastaturinterface hakt manchmal

• Farben, Hintergrund und Transparenz

teilweise schwierig einstellbar

• Probleme bei verschiedenen Fonts

• Probleme bei Themes (XP / Vista / 7)

• Layoutprobleme bei WinForms Docking

• Resizingprobleme bei DPI != 96

• u.v.m.

Page 28: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Generelle Tipps

• Prototyp bauen und ausprobieren

• Auf allen Windows Versionen testen

• Wenn etwas nach einer bestimmten Zeit nicht

klappt -> neu programmieren

Page 29: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Anwendungsarchitektur

Wie baut man Hybrid Anwendungen

• Anbindung des UI an Legacy Applikation

• Refactoring der Altanwendung

Page 30: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Aufbau einer WPF Komponente

WPFWindow/

UserControl

ApplicationModel

ViewModel

WPF voll nutzen:

• Kommandos

• Datenbindung

• Templates

• Validierung

• Typ-Konverter

• etc.

Page 31: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Tipps zur Architektur

• Für jeden WPF View ein eigenes ViewModelschreiben

• DataContext ans ViewModel binden

• Zugriff auf den alten Applikations-Code nur aus

dem ViewModel heraus

Page 32: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Wenn man sehr viel Glück hat…

Gute WinForms Architektur

WinFormsForm/UserControl

Presenter ApplicationModel

WPFWindow/

UserControlViewModel ApplicationModel

Neu schreiben mit XAML

Funktionalität wird übertragen

Weitgehend unverändert

Page 33: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Meistens sieht es leider eher so aus:

MyOldWinFormsApp.exe

Typische WinForms Architektur

WinFormsForm/UserControlplus Applikations-

Code

Page 34: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Code Refaktorierung

Architektur-Umbau

ApplicationModel(neuer / überarbeiteter Code)

WPFWindow/

UserControl

ViewModel ApplicationModel(alter Code)

Page 35: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Tipps zum Umbau

• MVVM Pattern verwenden

• Neue Komponenten sauber von altem Code

trennen

• Ggf. schon vor dem Umstieg WinForms

Anwendung „aufräumen“

• Etwas mehr Zeit für Fehlersuche und Tests einplanen

Page 36: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Fazit

• WPF ist die Zukunft des Desktops

• WPF macht mehr Spaß

• Schrittweiser Umstieg hält Lernkurve flach

• Hybride Anwendungen sind Notlösungen

• Wenn möglich mit WPF Anwendung vonGrund auf neu schreiben

Page 37: Von WinForms nach WPF - st-lange.net WPF in WinForms Control ElementHost regelt Interop WinForms UserControl ElementHost WPF UserControl. DEMO •WPF Dialog-Boxes in WinForms •WPF

Links

[email protected]

• Unterlagen zu dieser Session:

www.st-lange.net