Freigeben über


WPF- und Windows Forms-Interoperabilität

WPF und Windows Forms stellen zwei verschiedene Architekturen zum Erstellen von Anwendungsschnittstellen dar. Der System.Windows.Forms.Integration Namespace stellt Klassen bereit, die allgemeine Interoperationsszenarien ermöglichen. Die beiden wichtigsten Klassen, die Interoperationsfunktionen implementieren, sind WindowsFormsHost und ElementHost. In diesem Thema wird beschrieben, welche Interoperationsszenarien unterstützt werden und welche Szenarien nicht unterstützt werden.

Hinweis

Dem Hybridsteuerungsszenario wird besondere Beachtung geschenkt. Ein Hybridsteuerelement verfügt über ein Steuerelement aus einer Technologie, das in einem Steuerelement der anderen Technologie geschachtelt ist. Dies wird auch als geschachtelte Interoperabilität bezeichnet. Ein hybrides Steuerelement mit mehreren Ebenen verfügt über mehr als eine Ebene der Hybridsteuerungsschachtelung. Ein Beispiel für eine mehrstufige geschachtelte Interoperabilität ist ein Windows Forms-Steuerelement, das ein WPF-Steuerelement enthält, das ein anderes Windows Forms-Steuerelement enthält. Hybridsteuerelemente mit mehreren Ebenen werden nicht unterstützt.

Hosten von Windows Forms-Steuerelementen in WPF

Die folgenden Interoperabilitätsszenarien werden unterstützt, wenn ein WPF-Steuerelement ein Windows Forms-Steuerelement hostt:

  • Das WPF-Steuerelement kann ein oder mehrere Windows Forms-Steuerelemente mit XAML hosten.

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

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

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

  • Es kann ein Master-/Detail-Formular hosten, wobei das Master-Formular in Windows Forms und die Detailansicht in WPF umgesetzt wird.

  • Es kann ein oder mehrere ActiveX-Steuerelemente hosten.

  • Es kann ein oder mehrere zusammengesetzte Steuerelemente hosten.

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

  • Es kann Hybridsteuerelemente mithilfe von Code hosten.

Layoutunterstützung

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

  • In einigen Fällen kann die Größe von Windows Forms-Steuerelementen nicht geändert werden, oder die Größenänderung ist auf bestimmte Dimensionen begrenzt. Ein Windows Forms-ComboBox-Steuerelement unterstützt beispielsweise nur eine einzige Höhe, die durch die Schriftgröße des Steuerelements definiert wird. In einem dynamischen WPF-Layout, bei dem davon ausgegangen 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 verzerrt werden. Wenn Sie ihre Benutzeroberfläche beispielsweise um 90 Grad drehen, behalten gehostete Windows Forms-Steuerelemente ihre position aufrecht.

  • 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 hängt davon ab, wie gut jedes Windows Forms-Steuerelement die Skalierung unterstützt.

  • In einer WPF-Benutzeroberfläche können Sie die Z-Reihenfolge von Elementen ändern, um das überlappende Verhalten 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 die automatische Skalierung basierend auf dem Schriftgrad. Bei einer WPF-Benutzeroberfläche wird durch Ändern des Schriftgrads die Größe des gesamten Layouts nicht geändert, obwohl die Größe einzelner Elemente dynamisch geändert werden kann.

Umgebungseigenschaften

Einige der Umgebungseigenschaften von WPF-Steuerelementen weisen Windows Forms-Entsprechungen auf. Diese Umgebungseigenschaften werden an die gehosteten Windows Forms-Steuerelemente weitergegeben und als öffentliche Eigenschaften für das WindowsFormsHost Steuerelement verfügbar gemacht. Das WindowsFormsHost Steuerelement übersetzt jede WPF-Umgebungseigenschaft in seine Windows Forms-Entsprechung.

Weitere Informationen finden Sie unter Eigenschaftenzuordnung von Windows Forms und WPF.

Verhalten

In der folgenden Tabelle wird das Verhalten der Interoperabilität 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 gehosteter Windows Forms-Steuerelemente werden. Einige Windows Forms-Steuerelemente unterstützen keine Transparenz. Beispielsweise sind die TextBox Steuerelemente und ComboBox Steuerelemente nicht transparent, wenn sie von WPF gehostet werden.
Tabben Die Tabulatorreihenfolge für gehostete Windows Forms-Steuerelemente ist dieselbe wie wenn diese Steuerelemente in einer Windows Forms-basierten Anwendung gehostet werden.

Das Wechseln von einem WPF-Steuerelement zu einem Windows Forms-Steuerelement mit der Tab-Taste und der Umschalt+Tab-Taste funktioniert wie gewohnt.

Windows Forms-Steuerelemente mit einem Eigenschaftswert von TabStop, der Wert false hat, erhalten keinen Fokus, wenn der Benutzer durch die 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, folgen der durch die TabIndex Eigenschaft angegebenen Reihenfolge. Drückt man im letzten Registerkartenindex die Tabulatortaste, wird der Fokus auf das nächste WPF-Steuerelement gesetzt, falls eines vorhanden ist. Wenn kein anderes fokussierbares WPF-Steuerelement vorhanden ist, wird in der Tab-Reihenfolge zum ersten Windows Forms-Steuerelement zurückgekehrt.
- TabIndex Werte für Steuerelemente innerhalb des WindowsFormsHost sind relativ zu gleichgeordneten Windows Forms-Steuerelementen, die im WindowsFormsHost-Steuerelement enthalten sind.
– Tabbing berücksichtigt das spezifische Verhalten von Steuerelementen. Wenn Sie z. B. die TAB-TASTE in einem TextBox Steuerelement drücken, das einen AcceptsTab Eigenschaftswert von true aufweist, fügt dies einen Tabulator in das Textfeld ein, anstatt den Fokus zu wechseln.
Nicht zutreffend.
Navigation mit Pfeiltasten - Navigation mit Pfeiltasten im WindowsFormsHost Steuerelement ist identisch mit einem normalen Windows Forms-Containersteuerelement: Die NACH-OBEN- und NACH-LINKS-TASTE wählen das vorherige Steuerelement aus, und die NACH-UNTEN- und NACH-RECHTS-TASTE wählen das nächste Steuerelement aus.
- Die NACH-OBEN- und NACH-LINKS-TASTE des ersten Steuerelements, das im WindowsFormsHost Steuerelement enthalten ist, führen dieselbe Aktion wie die TASTENkombination UMSCHALT+TAB aus. Wenn ein fokussierbares WPF-Steuerelement vorhanden ist, wird der Fokus außerhalb des Steuerelements WindowsFormsHost verschoben. Dieses Verhalten unterscheidet sich vom Standardverhalten ContainerControl darin, dass kein Umbruch zum letzten Steuerelement stattfindet. Wenn kein anderes fokussierbares WPF-Steuerelement vorhanden ist, kehrt der Fokus auf das letzte Windows Forms-Steuerelement in der Aktivierreihenfolge zurück.
- Die NACH-UNTEN-TASTE und die NACH-RECHTS-TASTE des letzten Steuerelements, das im WindowsFormsHost Steuerelement enthalten ist, erledigen dieselbe Funktion wie die TAB-TASTE. Wenn ein fokussierbares WPF-Steuerelement vorhanden ist, wird der Fokus außerhalb des Steuerelements WindowsFormsHost verschoben. Dieses Verhalten unterscheidet sich von dem Standardverhalten ContainerControl, da kein Umbruch zum ersten Steuerelement erfolgt. Wenn kein anderes fokussierbares WPF-Steuerelement vorhanden ist, kehrt der Fokus auf das erste Windows Forms-Steuerelement in der Aktivierreihenfolge zurück.
Nicht zutreffend.
Beschleuniger Zugriffstasten funktionieren wie gewohnt, mit Ausnahme der Angabe in der Spalte "Nicht unterstützt". Doppelte Beschleuniger in unterschiedlichen Technologien funktionieren nicht wie normale doppelte Beschleuniger. Wenn eine Zugriffstaste über Technologien hinweg dupliziert wird, wobei mindestens ein Windows Forms-Steuerelement und das andere in einem WPF-Steuerelement vorhanden ist, erhält immer das Windows Forms-Steuerelement die Zugriffstaste. Der Fokus wechselt nicht zwischen den Steuerelementen, wenn der doppelte Beschleuniger gedrückt wird.
Tastenkombinationen Tastenkombinationen funktionieren wie gewohnt, außer wenn in der Spalte "Nicht unterstützt" angegeben. – Windows Forms-Tastenkombinationen, die in der Vorverarbeitungsphase behandelt werden, haben immer Vorrang vor WPF-Tastenkombinationen. Wenn Sie z. B. über ein ToolStrip Steuerelement mit STRG+S-Tastenkombinationen verfügen und ein WPF-Befehl an STRG+S gebunden ist, wird der ToolStrip Steuerelementhandler unabhängig vom Fokus immer zuerst aufgerufen.
– Windows Forms-Tastenkombinationen, die vom KeyDown-Ereignis behandelt werden, werden zuletzt in WPF verarbeitet. Sie können dieses Verhalten verhindern, indem Sie die Methode des Windows Forms-Steuerelements IsInputKey überschreiben oder das PreviewKeyDown Ereignis behandeln. true von der IsInputKey-Methode zurückgeben oder den Wert der PreviewKeyDownEventArgs.IsInputKey-Eigenschaft auf true in Ihrem PreviewKeyDown-Ereignishandler festlegen.
AcceptsReturn, AcceptsTab und anderes von Steuerungselementen spezifisches Verhalten Eigenschaften, die das Standardtastaturenverhalten ändern, funktionieren wie gewohnt, vorausgesetzt, das Windows Forms-Steuerelement setzt die IsInputKey zurückzugebende trueMethode außer Kraft. Windows Forms-Steuerelemente, die das Standardtastaturenverhalten durch Behandeln des KeyDown Ereignisses ändern, werden zuletzt im Host-WPF-Steuerelement verarbeitet. Da diese Steuerelemente zuletzt verarbeitet werden, können sie zu unerwartetem Verhalten führen.
Betreten und Verlassen von Veranstaltungen Wenn der Fokus nicht auf das enthaltende ElementHost Steuerelement wechselt, werden die Enter- und Leave-Ereignisse wie gewohnt ausgelöst, wenn sich der Fokus in einem einzelnen WindowsFormsHost Steuerelement ändert. Enter- und Leave-Ereignisse werden nicht ausgelöst, wenn die folgenden Fokusänderungen auftreten:

- Von innen nach außen eines Steuerelements WindowsFormsHost .
- Von außen in ein WindowsFormsHost Steuerelement.
- Außerhalb eines Steuerelements WindowsFormsHost .
– Von einem Windows Forms-Steuerelement, das in einem WindowsFormsHost Steuerelement gehostet wird, zu einem ElementHost Steuerelement, das innerhalb desselben WindowsFormsHostgehostet wird.
Multithreading (Mehrfachverarbeitung) Alle Varianten von Multithreading werden unterstützt. Sowohl die Windows Forms- als auch die WPF-Technologien gehen von einem Singlethread-Parallelitätsmodell aus. Beim Debuggen lösen Aufrufe von Frameworkobjekten aus anderen Threads eine Ausnahme aus, um diese Anforderung zu erzwingen.
Sicherheit Alle Interoperabilitätsszenarien erfordern volles Vertrauen. Es sind keine Interoperationsszenarien bei eingeschränktem Vertrauen zulässig.
Zugänglichkeit Alle Barrierefreiheitsszenarien werden unterstützt. Hilfstechnologieprodukte funktionieren ordnungsgemäß, wenn sie für Hybridanwendungen verwendet werden, die sowohl Windows Forms- als auch WPF-Steuerelemente enthalten. Nicht zutreffend.
Zwischenablage Alle Zwischenablagefunktionen funktionieren wie gewohnt. Dies umfasst das Ausschneiden und Einfügen zwischen Windows Forms- und WPF-Steuerelementen. Nicht zutreffend.
Drag-and-Drop-Funktion Alle Drag-and-Drop-Vorgänge funktionieren wie gewohnt. Dazu gehören Vorgänge zwischen Windows Forms- und WPF-Steuerelementen. Nicht zutreffend.

Hosten von WPF-Steuerelementen in Windows Forms

Die folgenden Interoperabilitätsszenarien werden unterstützt, wenn ein Windows Forms-Steuerelement ein WPF-Steuerelement hostt:

  • Hosten eines oder mehrerer WPF-Steuerelemente mithilfe von Code.

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

  • Hosten einer oder mehrerer WPF-Seiten in einem Formular.

  • Starten eines WPF-Fensters

  • Bereitstellung eines Master-/Detailformulars mit einem Windows Forms-Master und eines WPF-Details.

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

  • Hosten benutzerdefinierter WPF-Steuerelemente.

  • Hosten von Hybridsteuerelementen.

Umgebungseigenschaften

Einige der Umgebungseigenschaften von Windows Forms-Steuerelementen weisen WPF-Entsprechungen auf. Diese Umgebungseigenschaften werden an die gehosteten WPF-Steuerelemente weitergegeben und als öffentliche Eigenschaften für das ElementHost Steuerelement verfügbar gemacht. Das ElementHost Steuerelement übersetzt jede Windows Forms-Umgebungseigenschaft in seine WPF-Entsprechung.

Weitere Informationen finden Sie unter Eigenschaftenzuordnung von Windows Forms und WPF.

Verhalten

In der folgenden Tabelle wird das Verhalten der Interoperabilität 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 gehosteter WPF-Steuerelemente werden. Nicht zutreffend.
Multithreading (Mehrfachverarbeitung) Alle Varianten von Multithreading werden unterstützt. Sowohl die Windows Forms- als auch die WPF-Technologien gehen von einem Singlethread-Parallelitätsmodell aus. Beim Debuggen lösen Aufrufe von Frameworkobjekten aus anderen Threads eine Ausnahme aus, um diese Anforderung zu erzwingen.
Sicherheit Alle Interoperabilitätsszenarien erfordern volles Vertrauen. Es sind keine Interoperationsszenarien bei eingeschränktem Vertrauen zulässig.
Zugänglichkeit Alle Barrierefreiheitsszenarien werden unterstützt. Hilfstechnologieprodukte funktionieren ordnungsgemäß, wenn sie für Hybridanwendungen verwendet werden, die sowohl Windows Forms- als auch WPF-Steuerelemente enthalten. Nicht zutreffend.
Zwischenablage Alle Zwischenablagefunktionen funktionieren wie gewohnt. Dies umfasst das Ausschneiden und Einfügen zwischen Windows Forms- und WPF-Steuerelementen. Nicht zutreffend.
Drag-and-Drop-Funktion Alle Drag-and-Drop-Vorgänge funktionieren wie gewohnt. Dazu gehören Vorgänge zwischen Windows Forms- und WPF-Steuerelementen. Nicht zutreffend.

Siehe auch