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.
Anmerkung
Bei dem -Hybridszenario wird besondere Aufmerksamkeit geschenkt. Ein Hybridsteuerelement enthält ein Steuerelement einer Technologie, das in einem Steuerelement der anderen Technologie eingebettet ist. Dies wird auch als geschachtelte Interoperabilitätbezeichnet. Ein hybrides Steuerungssystem mit mehreren Ebenen der Steuerung enthält mehr als eine Ebene der Schachtelung hybrider Steuerungen. 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.
Einbetten 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-Detail-Formular mit einem WPF-Master- und einem Windows Forms-Detail hosten.
Es kann ein Master-/Detailformular hosten, bei dem der Master in Windows Forms und die Details in WPF vorliegen.
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 können die Größe von Windows Forms-Steuerelementen nicht geändert werden oder nur auf bestimmte Dimensionen angepasst werden. Ein Windows Forms-ComboBox-Steuerelement unterstützt beispielsweise nur eine festgelegte Höhe, die durch die Schriftgröße des Steuerelements bestimmt 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 die gehosteten Windows Forms-Steuerelemente ihre aufrechte Position.
In den meisten Fällen unterstützen Windows Forms-Steuerelemente keine proportionale Skalierung. Obwohl die Gesamtabmessungen des Steuerelements skaliert werden, passen sich untergeordnete Steuerelemente und Komponentenelemente des Steuerelements möglicherweise nicht wie erwartet an. 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 und erscheint daher immer über den WPF-Elementen.
Windows Forms-Steuerelemente unterstützen die automatische Skalierung basierend auf der Schriftgröße. 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 auf dem WindowsFormsHost-Steuerelement verfügbar gemacht. Das WindowsFormsHost-Steuerelement übersetzt jede WPF-Ambienteigenschaft in ihr entsprechendes Windows Forms-Äquivalent.
Weitere Informationen finden Sie unter Windows Forms- und WPF-Eigenschaftszuordnung.
Verhalten
In der folgenden Tabelle wird das Verhalten der Interoperabilität beschrieben.
Verhalten | Unterstützt | Nicht unterstützt |
---|---|---|
Transparenz | Die Darstellung von Windows Forms-Steuerelementen unterstützt Transparenz. Der Hintergrund des übergeordneten WPF-Steuerelements kann als Hintergrund für gehostete Windows Forms-Steuerelemente dienen. | Einige Windows Forms-Steuerelemente unterstützen keine Transparenz. Beispielsweise sind die Steuerelemente TextBox und ComboBox nicht transparent, wenn sie von WPF gehostet werden. |
Tabben | Die Aktivierreihenfolge für gehostete Windows Forms-Steuerelemente entspricht dem, wenn diese Steuerelemente in einer Windows Forms-basierten Anwendung gehostet werden. Das Wechseln zwischen einem WPF-Steuerelement und einem Windows Forms-Steuerelement mit der Tabulatortaste und Umschalt+Tab-Taste funktioniert wie erwartet. Windows Forms-Steuerelemente, die einen TabStop-Eigenschaftswert von false aufweisen, erhalten keinen Fokus, wenn der Benutzer mit der Tabulatortaste 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. Wenn vorhanden, legt die Tabulatortaste aus dem letzten Registerkartenindex den Fokus auf das nächste WPF-Steuerelement fest. Wenn kein anderes fokussierbares WPF-Steuerelement vorhanden ist, kehrt die Tabulatortaste zum ersten Windows Forms-Steuerelement in der Aktivierreihenfolge zurück. - TabIndex Werte für Steuerelemente innerhalb der WindowsFormsHost sind relativ zu gleichgeordneten Windows Forms-Steuerelementen, die im WindowsFormsHost-Steuerelement enthalten sind. – Die Tabulatorbewegung berücksichtigt steuerelementspezifisches Verhalten. Wenn Sie z. B. die TAB-TASTE in einem TextBox Steuerelement drücken, das einen AcceptsTab Eigenschaftswert von true hat, wird eine Registerkarte in das Textfeld eingefügt, anstatt den Fokus zu verschieben. |
Nicht zutreffend. |
Navigation mit Pfeiltasten | - Die Navigation mit den Pfeiltasten im Steuerelement WindowsFormsHost funktioniert genauso wie in einem gewöhnlichen Windows Forms-Containersteuerelement: Die NACH-OBEN- und NACH-LINKS-TASTEN wählen das vorherige Steuerelement, während die NACH-UNTEN- und NACH-RECHTS-TASTEN das nächste Steuerelement auswählen. - 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 WindowsFormsHost-Steuerelements verschoben. Dieses Verhalten unterscheidet sich von dem Standardverhalten ContainerControl, bei dem kein Umbruch zum letzten Steuerelement erfolgt. 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- und NACH-RECHTS-TASTE des letzten Steuerelements, das im WindowsFormsHost Steuerelement enthalten ist, führen dieselbe Aktion wie die TAB-TASTE aus. Wenn ein fokussierbares WPF-Steuerelement vorhanden ist, wird der Fokus außerhalb des WindowsFormsHost-Steuerelements verschoben. Dieses Verhalten unterscheidet sich von dem Standardverhalten ContainerControl, dass kein Umbruch zum ersten Steuerelement auftritt. Wenn kein anderes fokussierbares WPF-Steuerelement vorhanden ist, kehrt der Fokus auf das erste Windows Forms-Steuerelement in der Tab-Reihenfolge zurück. |
Nicht zutreffend. |
Beschleuniger | Beschleuniger funktionieren wie üblich, außer wenn in der Spalte "Nicht unterstützt" anders angegeben. | Doppelte Beschleuniger über verschiedene Technologien hinweg funktionieren nicht wie gewöhnliche doppelte Beschleuniger. Wenn eine Zugriffstaste über Technologien hinweg dupliziert wird, wobei mindestens eine auf einem Windows Forms-Steuerelement und die andere auf einem WPF-Steuerelement liegt, erhält immer das Windows Forms-Steuerelement die Zugriffstaste. Der Fokus wechselt nicht zwischen den Steuerelementen, wenn die doppelte Schnellzugrifftaste gedrückt wird. |
Tastenkombinationen | Tastenkombinationen funktionieren wie gewohnt, außer in den Bereichen, die in der Spalte "Nicht unterstützt" angegeben sind. | – Windows Forms-Tastenkombinationen, die in der Vorverarbeitungsphase behandelt werden, haben immer Vorrang vor WPF-Tastenkombinationen. Wenn Sie z. B. ein ToolStrip-Steuerelement mit definierten Tastenkombinationen Strg+S haben und ein WPF-Befehl an Strg+S gebunden ist, wird der ToolStrip-Steuerelementhandler 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 behandeln. Geben Sie true aus der IsInputKey-Methode zurück, oder legen Sie den Wert der eigenschaft PreviewKeyDownEventArgs.IsInputKey in Ihrem PreviewKeyDown Ereignishandler auf true fest. |
AcceptsReturn, AcceptsTab und anderes steuerungsspezifisches Verhalten | Eigenschaften, die das Standardtastaturenverhalten ändern, funktionieren wie gewohnt, vorausgesetzt, das Windows Forms-Steuerelement setzt die IsInputKey-Methode außer Kraft, um true zurückzugeben. |
Windows Forms-Steuerelemente, die das Standardtastaturverhalten durch das Behandeln des KeyDown-Ereignisses ändern, werden im WPF-Hoststeuerelement zuletzt verarbeitet. Da diese Steuerelemente zuletzt verarbeitet werden, können sie zu unerwartetem Verhalten führen. |
Ereignisse eingeben und verlassen | Wenn der Fokus nicht auf das enthaltende ElementHost-Steuerelement wechselt, werden die Enter- und Leave-Ereignisse wie gewohnt ausgelöst, wenn der Fokus innerhalb eines einzelnen WindowsFormsHost-Steuerelements wechselt. | Enter- und Leave-Ereignisse werden nicht ausgelöst, wenn die folgenden Fokusänderungen auftreten: Von innen nach außen durch ein WindowsFormsHost-Steuerelement. - Von außen in ein 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 derselben WindowsFormsHostgehostet wird. |
Multithreading | 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 Framework-Objekten aus anderen Threads eine Ausnahme aus, um diese Anforderung zu erzwingen. |
Sicherheit | Alle Interoperabilitätsszenarien erfordern vollständiges Vertrauen. | Es sind keine Interoperationsszenarien im eingeschränkten Vertrauensmodus 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 Zwischenablagevorgänge 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.
Ein WPF-Fenster starten
Erstellen eines Master-Detail-Formulars mit einem Windows-Forms-Master und WPF-Details.
Hosten eines Master-/Detailformulars mit WPF-Master- und Windows Forms-Details.
Hosten benutzerdefinierter WPF-Steuerelemente.
Hosting 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-Ambient-Eigenschaft in ihre WPF-Entsprechung.
Weitere Informationen finden Sie unter Windows Forms und WPF-Eigenschaftszuordnung.
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 | 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 Framework-Objekten aus anderen Threads eine Ausnahme aus, um diese Anforderung durchzusetzen. |
Sicherheit | Alle Interoperabilitätsszenarien erfordern volles Vertrauen. | Es sind keine Interoperabilitätsszenarien in Teilvertrauensstellung 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 Zwischenablagevorgänge 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
- ElementHost
- WindowsFormsHost
- Exemplarische Vorgehensweise: Hosten eines Windows Forms-Steuerelements in WPF-
- Exemplarische Vorgehensweise: Hosten eines zusammengesetzten Windows Forms-Steuerelements in WPF-
- Schritt-für-Schritt-Anleitung: Hosten eines zusammengesetzten WPF-Steuerelements in Windows Forms
- Eigenschaftszuordnung für Windows Forms und WPF
.NET Desktop feedback