Delen via


Overwegingen voor indeling voor het Element WindowsFormsHost

In dit onderwerp wordt beschreven hoe het WindowsFormsHost element communiceert met het WPF-indelingssysteem.

WPF en Windows Forms ondersteunen verschillende, maar vergelijkbare logica voor het aanpassen en positioneren van elementen op een formulier of pagina. Wanneer u een hybride gebruikersinterface (UI) maakt die als host fungeert voor Windows Forms-besturingselementen in WPF, integreert het WindowsFormsHost element de twee indelingsschema's.

Verschillen in indeling tussen WPF- en Windows-formulieren

WPF maakt gebruik van resolutie-onafhankelijke indeling. Alle WPF-indelingsafmetingen worden opgegeven in apparaatonafhankelijke pixels. Een apparaatonafhankelijke pixel is een negentig-zesde van een inch in grootte en resolutie-onafhankelijk, zodat u vergelijkbare resultaten krijgt, ongeacht of u een 72 dpi-monitor of een printer van 19.200 dpi weergeeft.

WPF is ook gebaseerd op dynamische indeling. Dit betekent dat een UI-element zichzelf op een formulier of pagina rangschikt op basis van de inhoud, de bovenliggende indelingscontainer en de beschikbare schermgrootte. Dynamische indeling vereenvoudigt lokalisatie door automatisch de grootte en positie van UI-elementen aan te passen wanneer de tekenreeksen de lengte wijzigen.

Indeling in Windows Forms is apparaatafhankelijk en is waarschijnlijk statischer. Windows Forms-besturingselementen worden doorgaans absoluut op een formulier geplaatst met afmetingen die zijn opgegeven in hardware pixels. Windows Forms biedt echter wel ondersteuning voor enkele dynamische indelingsfuncties, zoals samengevat in de volgende tabel.

Indelingseigenschap Beschrijving
Automatisch aanpassen Sommige Windows Forms-besturingselementen passen het formaat ervan aan om de inhoud correct weer te geven. Zie AutoSize Eigenschapsoverzichtvoor meer informatie.
Verankering en aanmeren Windows Forms-besturingselementen ondersteunen positionering en groottebepaling op basis van de bovenliggende container. Zie voor meer informatie Control.Anchor en Control.Dock.
Automatisch schalen Containerbesturingselementen passen zichzelf en hun onderliggende elementen aan op basis van de resolutie van het weergaveapparaat of de grootte, in pixels, van het standaardcontainerlettertype. Zie Automatisch schalen in Windows Forms voor meer informatie.
Opmaak containers De FlowLayoutPanel- en TableLayoutPanel-elementen rangschikken hun onderliggende elementen en passen hun grootte aan op basis van de inhoud.

Indelingsbeperkingen

In het algemeen kunnen Windows Forms-besturingselementen niet worden geschaald en getransformeerd, zoals wel mogelijk is in WPF. In de volgende lijst worden de bekende beperkingen beschreven wanneer het WindowsFormsHost-element probeert het gehoste Windows Forms-besturingselement te integreren in het WPF-indelingssysteem.

  • In sommige gevallen kunnen Windows Forms-besturingselementen niet worden gewijzigd of kunnen ze alleen worden aangepast aan specifieke dimensies. Een Besturingselement voor Windows Forms ComboBox ondersteunt bijvoorbeeld slechts één hoogte, die wordt gedefinieerd door de tekengrootte van het besturingselement. In een dynamische WPF-indeling waarin elementen verticaal kunnen worden uitgerekt, wordt een gehoste controle ComboBox niet uitgerekt zoals verwacht.

  • Windows Forms-besturingselementen kunnen niet worden gedraaid of scheef worden gedraaid. Het WindowsFormsHost element genereert de LayoutError gebeurtenis als u een scheeftrekking of rotatie transformatie toepast. Als u de LayoutError gebeurtenis niet afhandelt, wordt er een InvalidOperationException gegenereerd.

  • In de meeste gevallen bieden Windows Forms-besturingselementen geen ondersteuning voor proportioneel schalen. Terwijl de algehele dimensies van het besturingselement worden geschaald, kunnen onderliggende besturingselementen en subonderdelen van het besturingselement mogelijk niet worden aangepast zoals verwacht. Deze beperking is afhankelijk van hoe goed elk Windows Forms-besturingselement schaalaanpassing ondersteunt. Bovendien kunt u Windows Forms-besturingselementen niet omlaag schalen tot een grootte van 0 pixels.

  • Windows Forms-besturingselementen ondersteunen automatisch schalen, waarbij het formaat van het formulier automatisch wordt aangepast en de besturingselementen ervan op basis van de tekengrootte. Als u de tekengrootte wijzigt in een WPF-gebruikersinterface, wordt het formaat van de hele indeling niet aangepast, hoewel de grootte van afzonderlijke elementen dynamisch kan worden aangepast.

Z-order (de volgorde waarin grafische objecten over elkaar worden weergegeven)

In een WPF-gebruikersinterface kunt u de z-volgorde van elementen wijzigen om overlappend gedrag te beheren. Een gehost Besturingselement Voor Windows Forms wordt getekend in een afzonderlijke HWND, zodat het altijd op WPF-elementen wordt getekend.

Een gehost Besturingselement voor Windows Forms wordt ook bovenop de Adorner elementen getekend.

Indelingsgedrag

In de volgende secties worden specifieke aspecten van het indelingsgedrag beschreven bij het hosten van Besturingselementen voor Windows Forms in WPF.

Schaalaanpassing, eenheidsconversie en apparaatafhankelijkheid

Wanneer het WindowsFormsHost element bewerkingen uitvoert met WPF- en Windows Forms-dimensies, zijn er twee coördinatensystemen betrokken: apparaatonafhankelijke pixels voor WPF en hardware pixels voor Windows Forms. Daarom moet u de juiste eenheids- en schaalconversies toepassen om een consistente indeling te bereiken.

De conversie tussen de coördinatensystemen is afhankelijk van de huidige apparaatresolutie en eventuele indelings- of renderingtransformaties die zijn toegepast op het WindowsFormsHost element of op de bovenliggende elementen.

Als het uitvoerapparaat 96 dpi is en er geen schaalaanpassing is toegepast op het WindowsFormsHost element, is één apparaatonafhankelijke pixel gelijk aan één hardware pixel.

Voor alle andere gevallen is het schalen van het coördinaatsysteem vereist. Het gehoste besturingselement wordt niet aangepast in grootte. In plaats daarvan probeert het WindowsFormsHost-element het gehoste besturingselement en alle onderliggende child-besturingselementen te schalen. Omdat Windows Forms niet volledig ondersteuning biedt voor schalen, wordt het WindowsFormsHost element geschaald naar de mate die wordt ondersteund door bepaalde besturingselementen.

Overschrijf de ScaleChild methode om aangepast schaalgedrag te bieden voor het gehoste Besturingselement Windows Forms.

Naast schalen verwerkt het WindowsFormsHost element afrondings- en overflowgevallen, zoals beschreven in de volgende tabel.

Conversieprobleem Beschrijving
Afronding WPF-apparaatonafhankelijke pixeldimensies worden opgegeven als double, en Windows Forms hardware pixel dimensies worden opgegeven als int. In gevallen waarin double-gebaseerde dimensies worden geconverteerd naar int-gebaseerde dimensies, gebruikt het WindowsFormsHost element standaardafronding, zodat breukwaarden kleiner dan 0,5 naar beneden worden afgerond.
Overloop Wanneer het WindowsFormsHost element wordt geconverteerd van double waarden naar int waarden, is overloop mogelijk. Waarden die groter zijn dan MaxValue zijn ingesteld op MaxValue.

Eigenschappen die het gedrag van de indeling in Besturingselementen van Windows Forms en WPF-elementen bepalen, worden op de juiste wijze toegewezen door het WindowsFormsHost element. Zie Windows Forms en WPF Property Mappingvoor meer informatie.

Indelingswijzigingen in de gehoste control

Indelingswijzigingen in het gehoste Besturingselement Windows Forms worden doorgegeven aan WPF om indelingsupdates te activeren. De InvalidateMeasure methode op WindowsFormsHost zorgt ervoor dat indelingswijzigingen in het gehoste besturingselement de WPF-indelingsengine laten uitvoeren.

Continuus formaat van Windows Forms-besturingselementen

Windows Forms-besturingselementen die ondersteuning bieden voor continu schalen, communiceren volledig met het WPF-indelingssysteem. Het WindowsFormsHost element gebruikt de MeasureOverride en ArrangeOverride methoden zoals gebruikelijk om het gehoste Windows Forms-besturingselement te vermeerderen en te rangschikken.

Grootte-algoritme

Het WindowsFormsHost element gebruikt de volgende procedure om de grootte van het gehoste besturingselement af te meten.

  1. Het WindowsFormsHost element overschrijft de MeasureOverride en ArrangeOverride methoden.

  2. Om de grootte van het gehoste besturingselement te bepalen, roept de MeasureOverride methode de GetPreferredSize methode van het gehoste besturingselement aan met een vertaalde beperking van de oorspronkelijke beperking die aan de MeasureOverride methode is doorgegeven.

  3. De ArrangeOverride methode probeert het gehoste besturingselement in te stellen op de opgegeven groottebeperking.

  4. Als de eigenschap van Size het gehoste besturingselement overeenkomt met de opgegeven beperking, wordt het gehoste besturingselement aangepast aan de beperking.

Als de Size eigenschap niet overeenkomt met de opgegeven beperking, biedt het gehoste besturingselement geen ondersteuning voor continue grootte. Het controle laat bijvoorbeeld MonthCalendar alleen discrete maten toe. De toegestane grootten voor dit besturingselement bestaan uit gehele getallen (het aantal maanden) voor zowel hoogte als breedte. In dergelijke gevallen gedraagt het WindowsFormsHost element zich als volgt:

  • Als de Size eigenschap een grotere grootte retourneert dan de opgegeven beperking, snijdt het WindowsFormsHost-element het gehoste besturingselement af. De hoogte en breedte worden afzonderlijk verwerkt, zodat het gehoste besturingselement in beide richtingen kan worden geknipt.

  • Als de Size eigenschap een kleinere grootte retourneert dan de opgegeven beperking, WindowsFormsHost accepteert u deze groottewaarde en retourneert u de waarde naar het WPF-indelingssysteem.

Zie ook