Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
WPF en Windows Forms bieden twee verschillende architecturen voor het maken van toepassingsinterfaces. De System.Windows.Forms.Integration-naamruimte biedt klassen die algemene interoperatiescenario's mogelijk maken. De twee belangrijkste klassen die interoperation-mogelijkheden implementeren, zijn WindowsFormsHost en ElementHost. In dit onderwerp wordt beschreven welke interoperatiescenario's worden ondersteund en welke scenario's niet worden ondersteund.
Opmerking
Er wordt speciale aandacht besteed aan het hybride besturingsscenario . Een hybride besturing heeft een controle van de ene technologie die is genest in een besturingselement van de andere technologie. Dit wordt ook wel een geneste interoperationgenoemd. Een meerlagige hybride besturing heeft meer dan één niveau van geneste hybride besturing. Een voorbeeld van een geneste interoperation met meerdere niveaus is een Windows Forms-controle die een WPF-controle bevat, die op zijn beurt een andere Windows Forms-controle bevat. Hybride besturingselementen met meerdere niveaus worden niet ondersteund.
Het hosten van Windows Forms-besturingselementen in WPF
De volgende interoperatiescenario's worden ondersteund wanneer een WPF-besturingselement als host fungeert voor een Windows Forms-besturingselement:
Het WPF-besturingselement kan een of meer Besturingselementen voor Windows Forms hosten met behulp van XAML.
Het kan een of meer Besturingselementen voor Windows Forms hosten met behulp van code.
Het kan windows Forms-containerbesturingselementen hosten die andere Besturingselementen voor Windows Forms bevatten.
Het kan een master-/detailformulier hosten met een WPF-master en Windows Forms-details.
Het kan een master/detailformulier hosten met een Windows Forms-master en WPF-details.
Het kan een of meer ActiveX-besturingselementen hosten.
Het kan een of meer samengestelde besturingselementen hosten.
Het kan hybride bedieningselementen in gebruik nemen met behulp van Extensible Application Markup Language (XAML).
Het kan hybride besturingselementen hosten via code.
Indelingsondersteuning
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, waarbij wordt aangenomen dat elementen verticaal kunnen uitrekken, zal een gehost ComboBox-besturingselement niet zoals verwacht uitrekken.
Windows Forms-besturingselementen kunnen niet worden gedraaid of scheef worden gedraaid. Wanneer u uw gebruikersinterface bijvoorbeeld 90 graden roteert, behouden gehoste Besturingselementen voor Windows Forms hun rechte positie.
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.
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.
Besturingselementen voor Windows Forms ondersteunen automatisch schalen 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.
Omgevingseigenschappen
Sommige omgevingseigenschappen van WPF-besturingselementen hebben Equivalenten van Windows Forms. Deze omgevingseigenschappen worden doorgegeven aan de gehoste Windows Forms-besturingselementen en beschikbaar gesteld als openbare eigenschappen op het besturingselement WindowsFormsHost. Het WindowsFormsHost-controle zet elke WPF-omgevingseigenschap om in het equivalent van Windows Forms.
Zie Windows Forms en WPF Property Mappingvoor meer informatie.
Gedrag
In de volgende tabel wordt het interoperatiegedrag beschreven.
| Gedrag | Ondersteund | Niet ondersteund |
|---|---|---|
| Doorzichtigheid | Weergave van besturingselementen in Windows Forms ondersteunt transparantie. De achtergrond van het bovenliggende WPF-besturingselement kan de achtergrond worden van gehoste Windows Forms-besturingselementen. | Sommige Besturingselementen voor Windows Forms bieden geen ondersteuning voor transparantie. De besturingselementen TextBox en ComboBox zijn bijvoorbeeld niet transparant wanneer ze worden gehost door WPF. |
| Tabben | Tabvolgorde voor gehoste besturingselementen van Windows Forms is hetzelfde als wanneer deze besturingselementen worden gehost in een op Windows Forms gebaseerde toepassing. Het navigeren van een WPF-besturingselement naar een Windows Forms-besturingselement met de TAB-toets en Shift+TAB-toetsen functioneert zoals gewoonlijk. Windows Forms-besturingselementen met een TabStop eigenschapswaarde van false krijgen de focus niet wanneer de gebruiker met de tab-toets door de besturingselementen navigeert.- Elk WindowsFormsHost besturingselement heeft een TabIndex waarde, die bepaalt wanneer dat WindowsFormsHost besturingselement de focus krijgt. - Windows Forms-besturingselementen die zich in een WindowsFormsHost-container bevinden, volgen de volgorde die is opgegeven door de eigenschap TabIndex. Met tabs vanaf de laatste tabindex wordt de focus gelegd op het volgende WPF-besturingselement, indien aanwezig. Als er geen ander focusbaar WPF-besturingselement bestaat, keert tabbing terug naar het eerste Besturingselement Windows Forms in de tabvolgorde. - TabIndex waarden voor besturingselementen in de WindowsFormsHost zijn relatief ten opzichte van andere Windows Forms-besturingselementen die zich in het besturingselement WindowsFormsHost bevinden. - Tabben respecteert het controlespecifieke gedrag. Als u bijvoorbeeld op de TAB-toets drukt in een TextBox-besturingselement met een AcceptsTab-eigenschapswaarde van true, wordt er een tab in het tekstvak ingevoerd in plaats van dat de focus wordt verplaatst. |
Niet van toepassing. |
| Navigatie met pijltoetsen | - Navigatie met pijltoetsen in het WindowsFormsHost besturingselement is hetzelfde als in een gewoon Windows Forms-containerbesturingselement: de toetsen Pijl-omhoog en Pijl-links selecteren het vorige besturingselement en de toetsen Pijl-omlaag en Pijl-rechts selecteren het volgende besturingselement. - De toetsen Pijl-omhoog en Pijl-links van het eerste besturingselement dat deel uitmaakt van het besturingselement WindowsFormsHost voeren dezelfde actie uit als de sneltoets Shift+Tab. Als er een focusbaar WPF-besturingselement is, wordt de focus buiten het WindowsFormsHost besturingselement verplaatst. Dit gedrag verschilt van het standaard ContainerControl-gedrag doordat er geen terugval naar het laatste besturingselement plaatsvindt. Als er geen ander focusbaar WPF-besturingselement bestaat, keert de focus terug naar het laatste Windows Forms-besturingselement in de tabvolgorde. - De toetsen Pijl-omlaag en Pijl-rechts van het laatste besturingselement in het WindowsFormsHost besturingselement voeren dezelfde actie uit als de TAB-toets. Als er een focusbaar WPF-besturingselement is, wordt de focus buiten het WindowsFormsHost besturingselement verplaatst. Dit gedrag verschilt van het standaardgedrag ContainerControl doordat er geen terugloop naar het eerste besturingselement plaatsvindt. Als er geen ander focusbaar WPF-besturingselement bestaat, keert de focus terug naar het eerste Besturingselement Windows Forms in de tabvolgorde. |
Niet van toepassing. |
| Versnellers | Accelerators werken zoals gebruikelijk, behalve waar vermeld in de kolom 'Niet ondersteund'. | Dubbele versnellers tussen technologieën werken niet zoals gewone dubbele versnellers. Wanneer een accelerator over verschillende technologieën heen wordt gedupliceerd, met ten minste één op een Windows Forms-besturingselement en de andere op een WPF-besturingselement, ontvangt het Windows Forms-besturingselement altijd de accelerator. De focus schakelt niet tussen de besturingselementen wanneer de dubbele accelerator wordt ingedrukt. |
| Sneltoetsen | Sneltoetsen werken zoals gebruikelijk, behalve waar vermeld in de kolom 'Niet ondersteund'. | - Sneltoetsen voor Windows Forms die in de voorverwerkingsfase worden verwerkt, hebben altijd voorrang op WPF-sneltoetsen. Als u bijvoorbeeld een ToolStrip besturingselement hebt met ctrl+S sneltoetsen gedefinieerd en er een WPF-opdracht is gebonden aan Ctrl+S, wordt de ToolStrip besturingshandler altijd eerst aangeroepen, ongeacht de focus. - Sneltoetsen voor Windows Forms die door de KeyDown gebeurtenis worden verwerkt, worden voor het laatst verwerkt in WPF. U kunt dit gedrag voorkomen door de IsInputKey methode van het Besturingselement Windows Forms te overschrijven of de gebeurtenis PreviewKeyDown te verwerken. Retourneer true uit de methode IsInputKey of stel de waarde van de eigenschap PreviewKeyDownEventArgs.IsInputKey in op true in uw PreviewKeyDown gebeurtenis-handler. |
| AcceptsReturn, AcceptsTab en ander controlespecifiek gedrag | Eigenschappen die het standaardgedrag van het toetsenbord wijzigen, werken zoals gebruikelijk, ervan uitgaande dat het Windows Forms-besturingselement de methode IsInputKey overschrijft om trueterug te geven. |
Windows Forms-besturingselementen die het standaardgedrag van het toetsenbord wijzigen door de KeyDown gebeurtenis te verwerken, worden voor het laatst verwerkt in het WPF-hostbesturingselement. Omdat deze besturingselementen voor het laatst worden verwerkt, kunnen ze onverwacht gedrag produceren. |
| Gebeurtenissen invoeren en verlaten | Wanneer de focus niet naar het besturingselement met ElementHost gaat, worden de gebeurtenissen Enter en Leave op de gebruikelijke manier gegenereerd wanneer de focus binnen één enkel WindowsFormsHost besturingselement verandert. | Enter- en Leave-gebeurtenissen worden niet gegenereerd wanneer de volgende focuswijzigingen optreden: - Van binnen naar buiten een WindowsFormsHost besturingselement. - Van buiten naar binnen in een WindowsFormsHost besturingselement. - Buiten een WindowsFormsHost controle. - Van een Besturingselement van Windows Forms dat wordt gehost in een WindowsFormsHost besturingselement naar een ElementHost besturingselement dat binnen dezelfde WindowsFormsHostwordt gehost. |
| Multithreading | Alle variëteiten van multithreading worden ondersteund. | Voor zowel de Windows Forms- als WPF-technologieën wordt uitgegaan van een gelijktijdigheidsmodel met één thread. Tijdens foutopsporing, zullen aanroepen naar framework objecten van andere threads een uitzondering veroorzaken om deze vereiste af te dwingen. |
| Veiligheid | Voor alle interoperatiescenario's is volledig vertrouwen vereist. | Er zijn geen interoperatiescenario's toegestaan in gedeeltelijke vertrouwensrelatie. |
| Toegankelijkheid | Alle toegankelijkheidsscenario's worden ondersteund. Ondersteunende technologieproducten werken correct wanneer ze worden gebruikt voor hybride toepassingen die zowel Windows Forms als WPF-besturingselementen bevatten. | Niet van toepassing. |
| Klembord | Alle Klembordbewerkingen werken zoals gebruikelijk. Dit omvat knippen en plakken tussen Windows Forms en WPF-besturingselementen. | Niet van toepassing. |
| Functie slepen en neerzetten | Alle bewerkingen voor slepen en neerzetten werken zoals gebruikelijk. Dit omvat bewerkingen tussen Windows Forms en WPF-besturingselementen. | Niet van toepassing. |
WPF-componenten hosten in Windows Forms
De volgende interoperatiescenario's worden ondersteund wanneer een Windows Forms-besturingselement als host fungeert voor een WPF-besturingselement:
Host een of meer WPF-besturingselementen met behulp van code.
Een eigenschappenvenster koppelen aan een of meer gehoste WPF-besturingselementen.
Een of meer WPF-pagina's hosten in een formulier.
Een WPF-venster starten.
Hosten van een master/detailvenster met een Windows Forms-master en WPF-details.
Een master-/detailformulier hosten met een WPF-master en Windows Forms-details.
Aangepaste WPF-besturingselementen hosten.
Hybride bedieningselementen hosten.
Omgevingseigenschappen
Sommige omgevingseigenschappen van Besturingselementen van Windows Forms hebben WPF-equivalenten. Deze omgevingseigenschappen worden doorgegeven aan de gehoste WPF-besturingselementen en worden weergegeven als openbare eigenschappen op het ElementHost besturingselement. Het ElementHost besturingselement vertaalt elke omgevingseigenschap van Windows Forms naar het WPF-equivalent.
Zie Windows Forms en WPF Property Mappingvoor meer informatie.
Gedrag
In de volgende tabel wordt het interoperatiegedrag beschreven.
| Gedrag | Ondersteund | Niet ondersteund |
|---|---|---|
| Doorzichtigheid | WPF-besturingsweergave ondersteunt transparantie. De achtergrond van het bovenliggende Windows Forms-besturingselement kan de achtergrond worden van gehoste WPF-besturingselementen. | Niet van toepassing. |
| Multithreading | Alle variëteiten van multithreading worden ondersteund. | Voor zowel de Windows Forms- als WPF-technologieën wordt uitgegaan van een gelijktijdigheidsmodel met één thread. Tijdens foutopsporing, zullen aanroepen naar framework objecten van andere threads een uitzondering veroorzaken om deze vereiste af te dwingen. |
| Veiligheid | Voor alle interoperatiescenario's is volledig vertrouwen vereist. | Er zijn geen interoperatiescenario's toegestaan in gedeeltelijke vertrouwensrelatie. |
| Toegankelijkheid | Alle toegankelijkheidsscenario's worden ondersteund. Ondersteunende technologieproducten werken correct wanneer ze worden gebruikt voor hybride toepassingen die zowel Windows Forms als WPF-besturingselementen bevatten. | Niet van toepassing. |
| Klembord | Alle Klembordbewerkingen werken zoals gebruikelijk. Dit omvat knippen en plakken tussen Windows Forms en WPF-besturingselementen. | Niet van toepassing. |
| Functie slepen en neerzetten | Alle bewerkingen voor slepen en neerzetten werken zoals gebruikelijk. Dit omvat bewerkingen tussen Windows Forms en WPF-besturingselementen. | Niet van toepassing. |
Zie ook
.NET Desktop feedback