Interaktion zwischen WPF und Windows Forms

WPF und Windows Forms bieten zwei verschiedene Architekturen zum Erstellen von Anwendungsschnittstellen. Der Namespace System.Windows.Forms.Integration stellt Klassen bereit, die häufige Interoperationsszenarios ermöglichen. Die beiden wichtigsten Klassen, die Interoperationsfunktionen implementieren, sind WindowsFormsHost und ElementHost. In diesem Thema wird beschrieben, welche Interoperations-Szenarios unterstützt werden und welche nicht.

Hinweis

Besondere Augenmerk wird dabei auf Szenarios mit hybriden Steuerelementen gelegt. Ein hybrides Steuerelement ist ein Steuerelement einer Technologie, das in ein Steuerelement anderer Technologie geschachtelt ist. Daher nennt man dies auch eine geschachtelte Interoperation. Ein mehrstufiges hybrides Steuerelement verfügt über mehr als eine Ebene hybrider Steuerelement-Schachtelung. Ein Beispiel für eine mehrstufige geschachtelte Interoperation ist ein Windows Forms-Steuerelement, das ein WPF-Steuerelement enthält, in dem wiederum ein anderes Windows Forms-Steuerelement enthalten ist. Mehrstufige hybride Steuerelemente werden nicht unterstützt.

Hosten eines Windows Forms-Steuerelements in WPF

Die folgenden Interoperationsszenarios werden unterstützt, wenn ein WPF-Steuerelement ein Windows Forms-Steuerelement hostet:

  • Das WPF-Steuerelement kann ein oder mehrere Windows Forms-Steuerelemente mithilfe von XAML-Code hosten.

  • Es kann ein oder mehrere Windows Forms-Steuerelemente mithilfe von Code hosten.

  • Es kann Windows Forms-Containersteuerelemente hosten, die andere Windows Forms-Steuerelemente enthalten.

  • Es kann ein Master/Detail-Formular mit einem WPF-Master und Windows Forms-Details hosten.

  • Es kann ein Master/Detail-Formular mit einem Windows Forms-Master und WPF-Details hosten.

  • Es kann ein oder mehrere ActiveX-Steuerelemente hosten.

  • Es kann ein oder mehrere zusammengesetzte Steuerelemente hosten.

  • Es kann Hybridsteuerelemente mithilfe von Extensible Application Markup Language (XAML) hosten.

  • Es kann hybride Steuerelemente mithilfe von Code hosten.

Layout-Unterstützung

In der folgenden Liste werden die bekannten Einschränkungen beschrieben, wenn das Element WindowsFormsHost versucht, sein gehostetes Windows Forms-Steuerelement in das WPF-Layoutsystem zu integrieren.

  • In einigen Fällen können Steuerelemente für Windows Forms nicht geändert oder nur auf eine bestimmte Dimensionen beschränkt werden. Zum Beispiel unterstützt ein Windows Forms-ComboBox-Steuerelement nur eine einzige Größe, die durch seinen Schriftgrad definiert wird. In einem dynamischen WPF-Layout, bei dem angenommen wird, dass Elemente vertikal gestreckt werden können, wird ein gehostetes ComboBox-Steuerelement nicht wie erwartet gestreckt.

  • Windows Forms-Steuerelemente können nicht gedreht oder geneigt werden. Wenn Sie beispielsweise die Benutzeroberfläche um 90 Grad drehen, behalten gehostete Windows Forms-Steuerelemente ihre aufrechte Position bei.

  • In den meisten Fällen unterstützen Windows Forms-Steuerelemente keine proportionale Skalierung. Obwohl die gesamten Dimensionen des Steuerelements skaliert werden, können untergeordnete Steuerelemente und Komponenten des Steuerelements unter Umständen nicht wie erwartet skaliert werden. Diese Einschränkung ist davon abhängig, wie gut jedes Windows Forms-Steuerelement eine Skalierung unterstützt.

  • In einer WPF-Benutzeroberfläche können Sie die Z-Reihenfolge von Elementen ändern, um ihr Verhalten bei Überlappung zu steuern. Ein gehostetes Windows Forms-Steuerelement wird in einem separaten HWND gezeichnet, damit es sich immer oben auf den WPF-Elementen befindet.

  • Windows Forms-Steuerelemente unterstützen eine automatische Skalierung, die auf dem Schriftgrad basiert. In einer WPF-Benutzeroberfläche wird bei einer Änderung des Schriftgrads nicht die Größe des gesamten Layouts geändert; einzelne Elemente können ihre Größe jedoch dynamisch anpassen.

Umgebungseigenschaften

Bei einigen Umgebungseigenschaften von WPF-Steuerelementen gibt es Windows Forms-Entsprechungen. Diese Umgebungseigenschaften werden an die gehosteten Windows Forms-Steuerelemente weitergegeben und als öffentliche Eigenschaften im Steuerelement WindowsFormsHost verfügbar gemacht. Das Steuerelement WindowsFormsHost übersetzt jede WPF-Umgebungseigenschaft in deren Windows Forms-Entsprechung.

Weitere Informationen finden Sie unter Windows Forms and WPF Property Mapping (Eigenschaftenzuordnung von Windows Forms und WPF).

Verhalten

In der folgenden Tabelle werden Interoperations-Verhalten beschrieben.

Verhalten Unterstützt Nicht unterstützt
Transparenz Das Rendern von Windows Forms-Steuerelementen unterstützt Transparenz. Der Hintergrund des übergeordneten WPF-Steuerelements kann zum Hintergrund von gehosteten Windows Forms-Steuerelementen werden. Einige Windows Forms-Steuerelemente unterstützen nicht Transparenz. Beispielsweise sind die Steuerelemente TextBox und ComboBox nicht transparent, wenn sie von WPF gehostet werden.
Wechseln mit der Tabulatortaste Die Aktivierreihenfolge für gehostete Windows Forms-Steuerelemente ist identisch mit derjenigen, die auszuführen ist, wenn diese Steuerelemente in einer Windows Forms-basierten Anwendung gehostet werden.

Das Wechseln mit der Tabulatortaste von einem WPF-Steuerelement zu einem Windows Forms-Steuerelement funktioniert sowohl mit der TAB-Taste als auch mit den Tasten UMSCHALT+TAB wie üblich.

Windows Forms-Steuerelemente, die einen TabStop-Eigenschaftswert von false haben, erhalten keinen Fokus, wenn der Benutzer mit der Tabulatortaste durch Steuerelemente navigiert.

– Jedes WindowsFormsHost-Steuerelement hat einen TabIndex-Wert, der bestimmt, wann dieses WindowsFormsHost-Steuerelement den Fokus erhält.
– Windows Forms-Steuerelemente, die in einem WindowsFormsHost-Container enthalten sind, halten die durch die Eigenschaft TabIndex festgelegte Reihenfolge ein. Wechselt man vom letzten Tabulatorindex weiter, wird der Fokus auf das nächste WPF-Steuerelement gesetzt, sofern es eines gibt. Wenn es kein weiteres WPF-Steuerelement gibt, das den Fokus erhalten kann, kehrt das Wechseln mit der Tabulatortaste zum ersten Windows Forms-Steuerelement in der Aktivierreihenfolge zurück.
- TabIndex-Werte für Steuerelemente im WindowsFormsHost sind relativ zu gleichgeordneten Windows Forms-Steuerelementen, die im Steuerelement WindowsFormsHost enthalten sind.
– Beim Wechseln mit der Tabulatortaste wird steuerelementspezifisches Verhalten berücksichtigt. Wenn beispielsweise die TAB-TASTE in einem TextBox-Steuerelement gedrückt wird, das einen AcceptsTab-Eigenschaftswert von true hat, wird ein Tab im Textfeld eingegeben und der Fokus nicht verschoben.
Nicht zutreffend
Navigation mit Pfeiltasten – Die Navigation mit Pfeiltasten im Steuerelement WindowsFormsHost ist identisch mit derjenigen in einem normalen Windows Forms-Containersteuerelement: Mit der NACH OBEN- und NACH-LINKS-TASTE wird das vorhergehende Steuerelement ausgewählt, während mit der NACH UNTEN- und NACH-RECHTS-TASTE das nächste Steuerelement ausgewählt wird.
– Die NACH-OBEN- und NACH-LINKS-TASTE aus dem ersten Steuerelement, das im Steuerelement WindowsFormsHost enthalten ist, führen die gleiche Aktion wie die Tastenkombination UMSCHALT+TAB aus. Bei einem WPF-Steuerelement, das den Fokus erhalten kann, wird der Fokus außerhalb des Steuerelements WindowsFormsHost verschoben. Dieses Verhalten unterscheidet sich vom ContainerControl-Standardverhalten dadurch, dass es zu keinem Umbruch zum letzten Steuerelement kommt. Wenn es kein weiteres WPF-Steuerelement gibt, das den Fokus erhalten kann, kehrt der Fokus zum letzten Windows Forms-Steuerelement in der Aktivierreihenfolge zurück.
– Die NACH-UNTEN- und NACH-RECHTS-TASTE aus dem letzten Steuerelement, das im Steuerelement WindowsFormsHost enthalten ist, führen die gleiche Aktion wie die TAB-TASTE aus. Bei einem WPF-Steuerelement, das den Fokus erhalten kann, wird der Fokus außerhalb des Steuerelements WindowsFormsHost verschoben. Dieses Verhalten unterscheidet sich vom ContainerControl-Standardverhalten dadurch, dass es zu keinem Umbruch zum ersten Steuerelement kommt. Wenn es kein weiteres WPF-Steuerelement gibt, das den Fokus erhalten kann, kehrt der Fokus zum ersten Windows Forms-Steuerelement in der Aktivierreihenfolge zurück.
Nicht zutreffend
Zugriffstasten Zugriffstasten funktionieren wie üblich, außer den in der Spalte "Nicht unterstützt" angegebenen. Technologieübergreifend doppelt belegte Zugriffstasten funktionieren nicht wie gewöhnlich doppelt belegte Zugriffstasten. Wenn eine Zugriffstaste technologieübergreifend doppelt belegt ist (mit mindestens einer Zugriffstaste auf ein Windows Forms-Steuerelement und der anderen auf ein WPF-Steuerelement), erhält immer das Windows Forms-Steuerelement die Zugriffstaste. Bei gedrückter Zugriffstaste wechselt der Fokus nicht zwischen den beiden Steuerelementen.
Tastenkombinationen Tastenkombinationen funktionieren wie üblich, außer den in der Spalte "Nicht unterstützt" angegebenen. – Windows Forms-Tastenkombinationen, die in der Vorverarbeitungsphase verarbeitet werden, haben immer Vorrang vor WPF-Tastenkombinationen. Wenn Sie beispielsweise ein ToolStrip-Steuerelement mit definierten STRG+S-Tastenkombinationen haben und ein WPF-Befehl an STRG+S gebunden ist, wird der Steuerelementhandler ToolStrip immer zuerst aufgerufen, unabhängig vom Fokus.
– Windows Forms-Tastenkombinationen, die vom KeyDown-Ereignis behandelt werden, werden in WPF zuletzt verarbeitet. Sie können dieses Verhalten verhindern, indem Sie die IsInputKey-Methode des Windows Forms-Steuerelements außer Kraft setzen oder das PreviewKeyDown-Ereignis verarbeiten. Geben Sie true aus der IsInputKey-Methode zurück, oder legen Sie den Wert der Eigenschaft PreviewKeyDownEventArgs.IsInputKey in Ihrem Ereignishandler PreviewKeyDown auf true fest.
AcceptsReturn, AcceptsTab und andere steuerelementspezifische Verhalten Eigenschaften, die das standardmäßige Tastaturverhalten ändern, funktionieren wie üblich – vorausgesetzt, dass das Windows Forms-Steuerelement die IsInputKey-Methode überschreibt, um true zurückzugeben. Windows Forms-Steuerelemente, die das standardmäßige Tastaturverhalten durch Verarbeiten des KeyDown-Ereignisses ändern, werden im WPF-Hoststeuerelement zuletzt verarbeitet. Da diese Steuerelemente zuletzt verarbeitet werden, können sie zu unerwartetem Verhalten führen.
Enter- und Leave-Ereignisse Wenn der Fokus nicht zum enthaltenden Steuerelement ElementHost wechselt, werden Enter- und Leave-Ereignisse wie üblich ausgelöst, wenn sich der Fokus in einem einzigen WindowsFormsHost-Steuerelement ändert. Bei folgenden Fokusänderungen werden die Enter- und Leave-Ereignisse nicht ausgelöst:

– Von innen nach außen bei einem WindowsFormsHost-Steuerelement.
– Von außen nach innen bei einem WindowsFormsHost-Steuerelement.
– Außerhalb eines WindowsFormsHost-Steuerelements.
– Von einem Windows Forms-Steuerelement, das in einem WindowsFormsHost-Steuerelement gehostet wird, zu einem ElementHost-Steuerelement, das in demselben WindowsFormsHost gehostet wird.
Multithreading Alle Arten von Multithreading werden unterstützt. Sowohl die Windows Forms- als auch die WPF-Technologie gehen von einem Singlethread-Parallelitätsmodell aus. Während des Debuggens lösen Aufrufe von Framework-Objekten aus anderen Threads eine Ausnahme aus, um diese Anforderung zu erzwingen.
Sicherheit Alle Interoperationsszenarios erfordern volle Vertrauenswürdigkeit. Keine dieser Szenarios sind in teilweiser Vertrauenswürdigkeit zulässig.
Zugriff Alle Eingabehilfenszenarios werden unterstützt. Hilfstechnologieprodukte funktionieren einwandfrei, wenn sie bei Hybridanwendungen verwendet werden, die sowohl Windows Forms- als auch WPF-Steuerelemente enthalten. Nicht zutreffend
Zwischenablage Alle Zwischenablageoperationen funktionieren wie üblich. Dazu gehören Ausschneiden und Einfügen zwischen Windows Forms- und WPF-Steuerelementen. Nicht zutreffend
Drag & Drop-Funktion Alle Drag & Drop-Operationen funktionieren wie üblich. Dazu gehören Vorgänge zwischen Windows Forms- und WPF-Steuerelementen. Nicht zutreffend

Hosten von WPF-Steuerelementen in Windows Forms

Die folgenden Interoperationsszenarios werden unterstützt, wenn ein Windows Forms-Steuerelement ein WPF-Steuerelement hostet:

  • Hosten von einem oder mehreren WPF-Steuerelementen mithilfe von Code

  • Zuordnen eines Eigenschaftenblatts zu einem oder mehreren gehosteten WPF-Steuerelementen

  • Hosten von einer oder mehreren WPF-Seiten in einem Formular

  • Starten eines WPF-Fensters

  • Hosten eines Master/Detail-Formulars mit einem Windows Forms-Master und WPF-Details

  • Hosten eines Master/Detail-Formulars mit einem WPF-Master und Windows Forms-Details

  • Hosten von benutzerdefinierten WPF-Steuerelementen

  • Hosten von hybriden Steuerelementen

Umgebungseigenschaften

Bei einigen Umgebungseigenschaften von Windows Forms-Steuerelementen gibt es WPF-Entsprechungen. Diese Umgebungseigenschaften werden an die gehosteten WFP-Steuerelemente weitergegeben und als öffentliche Eigenschaften im Steuerelement ElementHost verfügbar gemacht. Das Steuerelement ElementHost übersetzt jede Windows Forms-Umgebungseigenschaft in deren WPF-Entsprechung.

Weitere Informationen finden Sie unter Windows Forms and WPF Property Mapping (Eigenschaftenzuordnung von Windows Forms und WPF).

Verhalten

In der folgenden Tabelle werden Interoperations-Verhalten beschrieben.

Verhalten Unterstützt Nicht unterstützt
Transparenz Das Rendern von WPF-Steuerelementen unterstützt Transparenz. Der Hintergrund des übergeordneten Windows Forms-Steuerelements kann zum Hintergrund von gehosteten WPF-Steuerelementen werden. Nicht zutreffend
Multithreading Alle Arten von Multithreading werden unterstützt. Sowohl die Windows Forms- als auch die WPF-Technologie gehen von einem Singlethread-Parallelitätsmodell aus. Während des Debuggens lösen Aufrufe von Framework-Objekten aus anderen Threads eine Ausnahme aus, um diese Anforderung zu erzwingen.
Sicherheit Alle Interoperationsszenarios erfordern volle Vertrauenswürdigkeit. Keine dieser Szenarios sind in teilweiser Vertrauenswürdigkeit zulässig.
Zugriff Alle Eingabehilfenszenarios werden unterstützt. Hilfstechnologieprodukte funktionieren einwandfrei, wenn sie bei Hybridanwendungen verwendet werden, die sowohl Windows Forms- als auch WPF-Steuerelemente enthalten. Nicht zutreffend
Zwischenablage Alle Zwischenablageoperationen funktionieren wie üblich. Dazu gehören Ausschneiden und Einfügen zwischen Windows Forms- und WPF-Steuerelementen. Nicht zutreffend
Drag & Drop-Funktion Alle Drag & Drop-Operationen funktionieren wie üblich. Dazu gehören Vorgänge zwischen Windows Forms- und WPF-Steuerelementen. Nicht zutreffend.

Siehe auch