Sie sind auf Seite 1von 30

Jörg Neumann, Resco/Thinktecture

Glücklich vereint
Interoperabilität zwischen WPF
und Windows Forms

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
ACANDO GROUP

Jörg Neumann
Principal bei der Resco GmbH in Hamburg
Associate bei Thinktecture
Beratung, Schulung, Coaching
Buchautor, Referent
Schwerpunkte:
SQL Server
Client-Technologien
Mail: Joerg.Neumann@Resco.de
Blog: WWW.HeadWriteLine.BlogSpot.com
Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com 2
Agenda
Warum Interop?
Möglichkeiten
WPF in Windows Forms nutzen
Windows Forms in WPF nutzen
ActiveX in WPF nutzen
Einschränkungen

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Agenda
Warum Interop?
Möglichkeiten
WPF in Windows Forms nutzen
Windows Forms in WPF nutzen
ActiveX in WPF nutzen
Einschränkungen

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Warum Interop?
Neuentwicklung sehr aufwändig
Es gibt keinen Upgrade-Wizard!
Die Lernkurve ist sehr steil
Es existiert z.Zt. noch nicht alle Tools
Es existieren noch nicht alle
Komponenten
Interop ist ein Mittelweg

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Warum Interop?
WPF-Technologien in alten Apps nutzen
2D/3D-Grafik
Animationen
Dokumente
Medien (Imaging/Audio/Video)

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Warum Interop?
Windows Forms in WPF nutzen
Komponenten aus Altanwendung weiter
nutzen
Fehlende Komponenten nachrüsten
DataGridView
MaskEditControl
DateTimePicker
PropertyGrid
...

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Agenda
Warum Interop?
Möglichkeiten
WPF in Windows Forms nutzen
Windows Forms in WPF nutzen
ActiveX in WPF nutzen
Einschränkungen

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Möglichkeiten

Windows Forms WPF


WPF Controls/Content WF Controls
WPF User Controls WF User Controls
WPF Windows WF Windows
ActiveX Controls
Datenquellen

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Klassenmodell

Win32

HwndHost HwndSource

WF/Win32 WPF in
in WPF WF/Win32
Windows Forms/WPF
WindowsForms
ElementHost
Host

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Namespace/Assembly
Namespace
System.Windows.Forms.Integration
Assembly
WindowsFormsIntegration.dll

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Agenda
Warum Interop?
Möglichkeiten
WPF in Windows Forms nutzen
Windows Forms in WPF nutzen
ActiveX in WPF nutzen
Einschränkungen

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
WPF in Windows Forms nutzen
WPF-Assemblies einbinden
WindowsBase.dll
PresentationCore.dll
PresentationFramework.dll
WindowsFormsIntegration.dll
Properties werden durchgereicht

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Beispiel

System.Windows.Controls.Button wpfButton =
new System.Windows.Controls.Button();

ElementHost host = new ElementHost();


host.Child = wpfButton;
this.Controls.Add(host);

wpfButton.Content = "WPF Button";


wpfButton.Width = 100;
wpfButton.Height = 100;

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Agenda
Warum Interop?
Möglichkeiten
WPF in Windows Forms nutzen
Windows Forms in WPF nutzen
ActiveX in WPF nutzen
Einschränkungen

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Windows Forms in WPF nutzen
Windows Forms Assemblies einbinden
System.Windows.Forms.dll
System.Drawing.dll
Kann über Code oder XAML
eingebunden werden
Properties werden durchgereicht

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Agenda
Warum Interop?
Möglichkeiten
WPF in Windows Forms nutzen
Windows Forms in WPF nutzen
ActiveX in WPF nutzen
Einschränkungen

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
ActiveX in WPF nutzen
Gleiche Funktionsweise wie bei
Windows Forms in WPF

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Agenda
Warum Interop?
Möglichkeiten
WPF in Windows Forms nutzen
Windows Forms in WPF nutzen
ActiveX in WPF nutzen
Einschränkungen

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Layout
Pixel kann nur von einer Technologie
gerendert werden!
WM_PAINT wird nur von einem verarbeitet
Problem: Alpha-Blending
(Durchsichtige Objekte, Overlay, ...)

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Layout
WindowsFormsHost
Kann nicht transformiert werden
Erscheint immer im Vordergrund
Muss 100% Opacity haben
Eltern-Element muss 100% Opacity haben
Clipping-Regions der Eltern werden ignoriert
Drag & Drop ist problematisch

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Input Events
WindowsFormsHost gibt folgende Events
nicht an WPF weiter:
Mouse-Events
Keyboard-Events
GotFocus / LostFocus

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Voraussetzungen
Zielrechner Windows XP oder höher
.NET 3.0 Runtime muss installiert sein

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Migrationsvorbereitungen
Separieren Sie Logik und UI
Kapseln Sie die UI in User Controls
Migrieren Sie ggf. Schritt für Schritt und
überbrücken Sie mit Interop

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Resourcen
Introducing Windows Forms - WPF Interoperability
http://blogs.msdn.com/mhendersblog/archive/2005/09/20/471814.aspx

Migration and Interoperability


http://msdn2.microsoft.com/en-us/library/ms753178.aspx

Windows Forms – WPF Interoperability FAQ


http://www.windowsforms.net/Samples/Go%20To%20Market/InterOP/Crossbo
w%20FAQ.doc

Interoperabilität zwischen WPF und WinForms


Artikel in dotnetpro 8/2007 von Jörg Neumann

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
Fragen?

Joerg.Neumannn@Thinktecture.com | www.HeadWriteLine.BlogSpot.com
{ In-depth support and consulting for
software architects and developers }
http://www.thinktecture.com/

joerg.neumann@thinktecture.com
http://HeadWriteLine.BlogSpot.com

30