Freigeben über


Überlegungen zum Layout für das WindowsFormsHost-Element

Aktualisiert: November 2007

In diesem Thema wird beschrieben, wie das WindowsFormsHost-Element mit dem WPF-Layoutsystem interagiert.

WPF und Windows Forms unterstützen unterschiedliche, aber ähnliche Logik für die Größenanpassung und Positionierung von Elementen in einem Formular oder auf einer Seite. Beim Erstellen einer Hybridbenutzeroberfläche, die Windows Forms-Steuerelemente in WPF hostet, führt das WindowsFormsHost-Element die beiden Layoutschemas zusammen.

Layoutunterschiede zwischen Windows Presentation Foundation und Windows Forms

WPF verwendet ein von der Auflösung unabhängiges Layout. Alle WPF-Layoutdimensionen werden in geräteunabhängigen Pixeln angegeben. Die Größe eines geräteunabhängigen Pixels beträgt ein neunundsechzigstel Zoll, und es ist nicht von der Auflösung abhängig. Unabhängig davon, ob Sie mit 72 DPI (Dots Per Inch) auf einem Bildschirm oder mit 19200 DPI auf einem Drucker rendern, erhalten Sie also ähnliche Ergebnisse.

WPF basiert auch auf dynamischem Layout. Dies bedeutet, dass die Größe eines Benutzeroberflächenelements auf einem Formular oder einer Seite entsprechend dem Inhalt, dem übergeordneten Layoutcontainer und der verfügbaren Bildschirmgröße angepasst wird. Das dynamische Layout erleichtert die Lokalisierung dadurch, dass die Größe und die Position von Benutzeroberflächenelementen automatisch angepasst werden, wenn sich die Länge der darin enthaltenen Zeichenfolgen ändert.

Das Layout in Windows Forms ist geräteabhängig und mit höherer Wahrscheinlichkeit statisch. Normalerweise werden Windows Forms-Steuerelemente in einem Formular absolut positioniert, wobei in Hardwarepixel angegebene Dimensionen verwendet werden. Windows Forms unterstützt jedoch einige dynamische Layoutfeatures, die in der folgenden Tabelle zusammengefasst werden.

Layoutfeature

Beschreibung

Automatische Größenanpassung

Einige Windows Forms-Steuerelemente ändern ihre Größe, damit ihr Inhalt richtig angezeigt wird. Weitere Informationen finden Sie unter Übersicht über die AutoSize-Eigenschaft.

Verankern und Andocken

Windows Forms-Steuerelemente unterstützen die Positionierung und die Größenanpassung auf Grundlage des übergeordneten Containers. Weitere Informationen finden Sie unter Control.Anchor und unter Control.Dock.

Automatische Skalierung

Container-Steuerelemente ändern ihre Größe und die Größe ihrer untergeordneten Elemente basierend auf der Auflösung des Ausgabegeräts oder der in Pixeln angegebenen Größe der Standardcontainerschriftart. Weitere Informationen finden Sie unter Automatische Skalierung in Windows Forms.

Layoutcontainer

Das FlowLayoutPanel-Steuerelement und das TableLayoutPanel-Steuerelement ordnen ihre untergeordneten Steuerelemente an und passen ihre Größe dem Inhalt an.

Layouteinschränkungen

Im Allgemeinen können Windows Forms-Steuerelemente nicht in dem Umfang skaliert und umgewandelt werden, wie es in WPF möglich ist. In der folgenden Liste werden die bekannten Einschränkungen beschrieben, die gelten, wenn das WindowsFormsHost-Element versucht, das zugehörige gehostete Windows Forms-Steuerelement in das WPF-Layoutsystem zu integrieren.

  • In einigen Fällen kann die Größe von Windows Forms-Steuerelementen nicht angepasst oder nur auf bestimmte Abmessungen festgelegt werden. Ein Windows FormsComboBox-Steuerelement unterstützt beispielsweise nur eine einzige Höhe, die durch den Schriftgrad des Steuerelements definiert wird. In einem dynamischen WPF-Layout, in dem 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. Das WindowsFormsHost-Element löst das LayoutError-Ereignis aus, wenn Sie eine Neigungs- oder eine Drehungstransformation anwenden. Wenn Sie das LayoutError-Ereignis nicht behandeln, wird eine InvalidOperationException ausgelöst.

  • In den meisten Fällen unterstützen Windows Forms-Steuerelemente keine proportionale Skalierung. Obwohl sich das Steuerelement generell skalieren lässt, wird die Größe von untergeordneten Steuerelementen und Komponentenelementen des Steuerelements möglicherweise nicht wie erwartet angepasst. Diese Einschränkung hängt davon ab, in welchem Maße das jeweilige Windows Forms-Steuerelement die Skalierung unterstützt. Außerdem können Sie die Größe von Windows Forms-Steuerelementen nicht auf 0 Pixel verringern.

  • Windows Forms-Steuerelemente unterstützen die automatische Skalierung, bei der die Größe des Formulars und seiner Steuerelemente entsprechend der Schriftart automatisch angepasst werden. Wenn Sie in einer WPF-Benutzeroberfläche den Schriftgrad ändern, wird nicht das gesamte Layout angepasst. Möglicherweise wird jedoch die Größe einzelner Elemente dynamisch angepasst.

Z-Reihenfolge

In einer WPF-Benutzeroberfläche können Sie die z-Reihenfolge ändern, um das Verhalten beim Überlappen zu steuern. Ein gehostetes Windows Forms-Steuerelement wird in einem separaten HWND gezeichnet, also immer über den WPF-Elementen.

Ein gehostetes Windows Forms-Steuerelement wird ebenfalls über allen Adorner-Elementen gezeichnet.

Layoutverhalten

In den folgenden Abschnitten werden bestimmte Aspekte des Layoutverhaltens beim Hosten von Windows Forms-Steuerelementen in WPF beschrieben.

Skalieren, Konvertieren von Einheiten und Geräteunabhängigkeit

Wenn das WindowsFormsHost-Element Operationen ausführt, bei denen WPF-Dimensionen und Windows Forms-Dimensionen verwendet werden, spielen zwei Koordinatensysteme eine Rolle: geräteunabhängige Pixel für WPF und Hardwarepixel für Windows Forms. Aus diesem Grund müssen Sie die Einheiten und Größen richtig umrechnen, damit ein konsistentes Layout erreicht wird.

Konvertierungen zwischen den Koordinatensystemen hängen von der aktuellen Geräteauflösung sowie jeglichen Layout- oder Renderingtransformationen ab, die auf das WindowsFormsHost-Element oder seine Vorgängerelemente angewendet werden.

Wenn ein Ausgabegerät mit 96 DPI verwendet wird und das WindowsFormsHost-Element nicht skaliert wurde, entspricht ein geräteunabhängiges Pixel einem Hardwarepixel.

In allen anderen Fällen ist die Skalierung des Koordinatensystems erforderlich. Die Größe des gehosteten Steuerelements wird nicht geändert. Stattdessen versucht das WindowsFormsHost-Element, das gehostete Steuerelement und alle untergeordneten Steuerelemente zu skalieren. Da Windows Forms die Skalierung nicht vollständig unterstützt, skaliert das WindowsFormsHost-Element in dem Umfang, der von bestimmten Steuerelementen unterstützt wird.

Überschreiben Sie die ScaleChild-Methode, um ein benutzerdefiniertes Skalierungsverhalten für das gehostete Windows Forms-Steuerelement bereitzustellen.

Neben der Skalierung behandelt das WindowsFormsHost-Element Fälle von Rundung und Überlauf, wie in der nachstehenden Tabelle beschrieben.

Konvertierungsproblem

Beschreibung

Runden

Die geräteunabhängigen WPF-Pixeldimensionen werden als double und die Windows Forms-Hardware-Pixeldimensionen als int angegeben. In Fällen, in denen double-basierte Dimensionen in int-basierte Dimensionen konvertiert werden, verwendet das WindowsFormsHost-Element die Standardrundung, sodass Bruchwerte unter 0,5 auf 0 abgerundet werden.

Overflow

Wenn das WindowsFormsHost-Element von double-Werten in int-Werte konvertiert, kann dies zu einem Überlauf führen. Werte, die größer sind als MaxValue, werden auf MaxValue festgelegt.

Eigenschaften, die sich auf das Layout beziehen

Eigenschaften, die das Layoutverhalten in Windows Forms-Steuerelementen und WPF-Elementen steuern, werden vom WindowsFormsHost-Element entsprechend zugeordnet. Weitere Informationen finden Sie unter Eigenschaftenzuordnung von Windows Forms und WPF.

Layoutänderungen im gehosteten Steuerelement

Layoutänderungen im gehosteten Windows Forms-Steuerelement werden an WPF weitergeleitet, um Layoutupdates auszulösen. Die InvalidateMeasure-Methode auf WindowsFormsHost stellt sicher, dass Änderungen am Layout des gehosteten Steuerelements dazu führen, dass das WPF-Layoutmodul ausgeführt wird.

Kontinuierlich skalierte Windows Forms-Steuerelemente

Windows Forms-Steuerelemente, die die kontinuierliche Skalierung unterstützen, interagieren vollständig mit dem WPF-Layoutsystem. Das WindowsFormsHost-Element verwendet die MeasureOverride-Methode und die ArrangeOverride-Methode wie gewohnt, um die Größe des gehosteten Windows Forms-Steuerelements anzupassen und es anzuordnen.

Größenanpassungsalgorithmus

Das WindowsFormsHost-Element verwendet das folgende Verfahren, um die Größe des gehosteten Steuerelements anzupassen:

  1. Das WindowsFormsHost-Element überschreibt die MeasureOverride-Methode und die ArrangeOverride-Methode.

  2. Um die Größe des gehosteten Steuerelements zu bestimmen, ruft die MeasureOverride-Methode die GetPreferredSize-Methode des gehosteten Steuerelements mit einer Einschränkung auf, die aus der an die MeasureOverride-Methode weitergegebenen Einschränkung übersetzt wird.

  3. Die ArrangeOverride-Methode versucht, das gehostete Steuerelement auf die gegebene Größeneinschränkung festzulegen.

  4. Wenn die Size-Eigenschaft des gehosteten Steuerelements der angegebenen Einschränkung entspricht, wird die Größe des gehosteten Steuerelements der Einschränkung entsprechend angepasst.

Wenn die Size-Eigenschaft nicht mit der angegebenen Einschränkung übereinstimmt, wird die kontinuierliche Größenanpassung von dem gehosteten Steuerelement nicht unterstützt. Zum Beispiel lässt das MonthCalendar-Steuerelement nur diskrete Größen zu. Die zulässigen Größen für dieses Steuerelement bestehen aus Ganzzahlen (welche die Monatszahl angeben) für die Höhe und die Breite. In solchen Fällen verhält sich das WindowsFormsHost-Element wie folgt:

  • Wenn die Size-Eigenschaft eine größere Größe als die angegebene Einschränkung angibt, beschneidet das WindowsFormsHost-Element das gehostete Steuerelement. Höhe und Breite werden getrennt behandelt, sodass das gehostete Steuerelement in beide Richtungen beschnitten werden kann.

  • Wenn die Size-Eigenschaft eine kleinere Größe als die angegebene Einschränkung angibt, akzeptiert das WindowsFormsHost-Element diesen Größenwert und gibt den Wert an das WPF-Layoutsystem zurück.

Siehe auch

Aufgaben

Exemplarische Vorgehensweise: Anordnen von Windows Forms-Steuerelementen in Windows Presentation Foundation

Beispiel für das Anordnen von Windows Forms-Steuerelementen in Windows Presentation Foundation

Konzepte

Eigenschaftenzuordnung von Windows Forms und WPF

Referenz

ElementHost

WindowsFormsHost

Weitere Ressourcen

Migration und Interoperabilität