Megosztás a következőn keresztül:


WPF és Windows Forms együttműködés

A WPF és a Windows Forms két különböző architektúrát mutat be az alkalmazásfelületek létrehozásához. A System.Windows.Forms.Integration névtér olyan osztályokat biztosít, amelyek lehetővé teszik a közös együttműködési forgatókönyveket. Az interoperációs képességeket megvalósító két fő osztály a(z) WindowsFormsHost és ElementHost. Ez a témakör azt ismerteti, hogy mely együttműködési forgatókönyvek támogatottak, és mely forgatókönyvek nem támogatottak.

Megjegyzés:

Különös figyelmet kell fordítani a hibrid vezérlési forgatókönyvre. A hibrid vezérlők egy másik technológia vezérlőibe ágyazott egyik technológiából származó vezérlővel rendelkezik. Ezt beágyazott interoperációnak is nevezik. A többszintű hibrid vezérlés egynél több szintű hibrid vezérlési beágyazással rendelkezik. A többszintű beágyazott együttműködésre példa egy olyan Windows Forms-vezérlő, amely egy WPF-vezérlőt tartalmaz, amely egy másik Windows Forms-vezérlőt tartalmaz. A többszintű hibrid vezérlők nem támogatottak.

Windows Forms-vezérlők üzemeltetése a WPF-ben

A következő együttműködési forgatókönyvek támogatottak, ha egy WPF-vezérlő Windows Forms-vezérlőt üzemeltet:

  • A WPF-vezérlő egy vagy több Windows Forms-vezérlőt üzemeltethet az XAML használatával.

  • Kód használatával egy vagy több Windows Forms-vezérlőt is üzemeltethet.

  • Más Windows Forms-vezérlőket tartalmazó Windows Forms tárolóvezérlőket is üzemeltethet.

  • Egy fő/részletű űrlapot is üzemeltethet WPF-főkiszolgálóval és Windows Forms-részletekkel.

  • Ez magában foglalhat egy fő/részletű űrlapot Windows Forms fő komponenssel és WPF részletekkel.

  • Egy vagy több ActiveX-vezérlőt is üzemeltethet.

  • Egy vagy több összetett vezérlőt is üzemeltethet.

  • Hibrid vezérlőket üzemeltethet az Extensible Application Markup Language (XAML) használatával.

  • Kóddal üzemeltethet hibrid vezérlőket.

Elrendezés támogatása

Az alábbi lista ismerteti azokat az ismert korlátozásokat, amikor az WindowsFormsHost elem megpróbálja integrálni az üzemeltetett Windows Forms-vezérlőt a WPF-elrendezési rendszerbe.

  • Bizonyos esetekben a Windows Forms vezérlői nem méretezhetők át, vagy csak meghatározott méretekre méretezhetők. A Windows Forms-vezérlők ComboBox például csak egyetlen magasságot támogatnak, amelyet a vezérlő betűmérete határoz meg. A WPF dinamikus elrendezésében, amely feltételezi, hogy az elemek függőlegesen is megnyúlhatnak, a tárolt ComboBox vezérlő nem fog a várt módon nyúlni.

  • A Windows Forms vezérlői nem forgathatók és nem állíthatók el. Ha például 90 fokkal elforgatja a felhasználói felületet, az üzemeltetett Windows Forms-vezérlők megtartják a függőleges pozíciójukat.

  • A Legtöbb esetben a Windows Forms-vezérlők nem támogatják az arányos skálázást. Bár a vezérlő általános méretei skálázhatók, előfordulhat, hogy a vezérlő gyermekvezérlői és összetevőelemei nem a várt módon méretezhetők át. Ez a korlátozás attól függ, hogy az egyes Windows Forms-vezérlők mennyire támogatják a skálázást.

  • A WPF felhasználói felületén módosíthatja az elemek z-sorrendjét az átfedéses viselkedés szabályozásához. A üzemeltetett Windows Forms-vezérlő külön HWND-ben lesz megrajzolva, így mindig a WPF-elemek fölé lesz rajzolva.

  • A Windows Forms vezérlői támogatják az automatikus skálázást a betűméret alapján. A WPF felhasználói felületén a betűméret módosítása nem méretezi át a teljes elrendezést, bár az egyes elemek dinamikusan átméretezhetők.

Környezeti tulajdonságok

A WPF-vezérlők néhány környezeti tulajdonsága Windows Forms-ekvivalens. Ezeket a környezeti tulajdonságokat a rendszer propagálja az üzemeltetett Windows Forms-vezérlőkre, és nyilvános tulajdonságokként jelenik meg a WindowsFormsHost vezérlőn. A WindowsFormsHost vezérlő az egyes WPF környezeti tulajdonságokat a Windows Forms megfelelőjeként fordítja le.

További információ: Windows Forms és WPF tulajdonságleképezés.

Magatartás

Az alábbi táblázat az együttműködési viselkedést ismerteti.

Magatartás Támogatott Nem támogatott
Átláthatóság A Windows Forms vezérlő renderelése támogatja az átláthatóságot. A szülő WPF-vezérlő háttere az üzemeltetett Windows Forms-vezérlők hátterévé válhat. Egyes Windows Forms-vezérlők nem támogatják az átláthatóságot. Például, ha a WPF üzemelteti, a TextBox és ComboBox vezérlők nem lesznek átlátszóak.
Tabulálás A hosztolt Windows Forms-vezérlők lapsorrendje megegyezik azzal, amikor ezeket a vezérlőket Windows Forms-alapú alkalmazásban hosztolják.

A TAB billentyűvel és a SHIFT+TAB billentyűkkel a WPF-vezérlőkről a Windows Forms-vezérlőkre történő lapozás a szokásos módon működik.

A tulajdonságértékkel TabStop rendelkező false Windows Forms-vezérlők nem kapnak fókuszt, amikor a felhasználó vezérlőkön keresztül lépeget.

- Minden WindowsFormsHost vezérlőnek van egy TabIndex értéke, amely meghatározza, hogy WindowsFormsHost a vezérlő mikor kap fókuszt.
– A tárolóban WindowsFormsHost található Windows Forms-vezérlők a tulajdonság által TabIndex megadott sorrendet követik. Az utolsó tabulátorindexről történő lapozás a következő WPF-vezérlőre helyezi a fókuszt, ha van ilyen. Ha nincs más fókuszba helyezhető WPF-vezérlő, a lapozás visszakerül az első Windows Forms-vezérlőre a tabulátor sorrendben.
- TabIndex a vezérlőn belüli WindowsFormsHost vezérlők értékei a vezérlőben WindowsFormsHost található testvér Windows Forms-vezérlőkhöz viszonyítva jelennek meg.
- A lapozás a vezérlőspecifikus viselkedést tiszteletben tartja. Például, ha megnyomja a TAB billentyűt egy olyan TextBox vezérlőelemben, amelynek AcceptsTab tulajdonságértéke true, akkor a fókusz áthelyezése helyett tabulátort ír be a szövegmezőbe.
Nem alkalmazható.
Navigáció nyílbillentyűkkel - A vezérlőben WindowsFormsHost a nyílbillentyűkkel való navigálás ugyanaz, mint egy hagyományos Windows Forms-tárolóvezérlőben: A FEL és a BALRA nyílbillentyűk az előző vezérlőt, a LE és a JOBBRA nyílbillentyűk pedig a következő vezérlőt jelölik ki.
- A WindowsFormsHost vezérlőben levő első vezérlő FEL és BALRA nyílbillentyűi ugyanazt a műveletet hajtják végre, mint a SHIFT+TAB billentyűparancs. Ha van fókuszba helyezhető WPF-vezérlő, a fókusz a WindowsFormsHost vezérlőn kívülre kerül. Ez a viselkedés abban különbözik a szokásos ContainerControl viselkedéstől, hogy nem történik átvitel az utolsó vezérlőre. Ha nincs más fókuszba helyezhető WPF-vezérlő, a fókusz a tabulátorsor utolsó Windows Forms vezérlőelemére tér vissza.
- A WindowsFormsHost vezérlőbe tartozó utolsó vezérlő LE és JOBBRA nyílbillentyűi ugyanazt a műveletet hajtják végre, mint a TAB billentyű. Ha van fókuszba helyezhető WPF-vezérlő, a fókusz a WindowsFormsHost vezérlőn kívülre kerül. Ez a viselkedés abban különbözik a szokásos ContainerControl viselkedéstől, hogy nem történik átirányítás az első vezérlőre. Ha nincs más fókuszba helyezhető WPF-vezérlő, a fókusz visszakerül az első Windows Forms vezérlőre a tabulátorsorrendben.
Nem alkalmazható.
Gyorsítók A gyorsítók a szokásos módon működnek, kivéve, ha a "Nem támogatott" oszlopban szerepel. A különböző technológiákban duplikált gyorsítók nem működnek úgy, mint a hagyományos duplikált gyorsítók. Ha egy gyorsító több technológiával duplikálva van, és legalább az egyik a Windows Forms vezérlőn, a másik pedig egy WPF-vezérlőn van, a Windows Forms vezérlő mindig megkapja a gyorsítót. A fókusz nem vált a vezérlők között a duplikált gázpedál lenyomásakor.
Gyorsbillentyűk A billentyűparancsok a szokásos módon működnek, kivéve az „Nem támogatott” oszlopban feltüntetett eseteket. – Az előfeldolgozási szakaszban kezelt Windows Forms billentyűparancsok mindig elsőbbséget élveznek a WPF billentyűparancsokkal szemben. Ha például ctrl ToolStrip +S billentyűparancsokat tartalmazó vezérlő van definiálva, és a CTRL+S billentyűkombinációhoz kötött WPF-parancs van megadva, a ToolStrip vezérlőkezelő mindig a fókusztól függetlenül először lesz meghívva.
– A KeyDown esemény által kezelt Windows Forms billentyűparancsok utoljára kerülnek feldolgozásra a WPF-ben. Ezt a viselkedést megakadályozhatja a Windows Forms vezérlő metódusának felülbírálásával IsInputKey vagy az esemény kezelésével PreviewKeyDown . Térjen vissza true a IsInputKey metódusból, vagy állítsa be a PreviewKeyDownEventArgs.IsInputKey tulajdonság true értékét az PreviewKeyDown eseménykezelőben.
AcceptsReturn, AcceptsTab és egyéb vezérlőspecifikus viselkedés Az alapértelmezett billentyűzet viselkedését módosító tulajdonságok a szokásos módon működnek, feltéve, hogy a Windows Forms vezérlő felülírja a IsInputKey visszatérési truemódszert. A Windows Forms-vezérlők, amelyek az KeyDown esemény kezelésével módosítják a billentyűzet alapértelmezett viselkedését, a végén kerülnek feldolgozásra a WPF gazda vezérlőjében. Mivel ezeket a vezérlőket utoljára dolgozzák fel, váratlan viselkedést okozhatnak.
Események érkezése és távozása Ha a fókusz nem a tartalmazó ElementHost vezérlőelemre kerül, az Enter és a Leave események a szokásos módon lesznek emelve, amikor a fókusz egyetlen WindowsFormsHost vezérlőben változik. Az Enter és a Leave események nem jelennek meg a következő fókuszváltozások esetén:

- Belülről a vezérlőn kívülre WindowsFormsHost .
- Kívülről egy WindowsFormsHost vezérlőbe.
- Egy vezérlőn kívül WindowsFormsHost .
– Egy WindowsFormsHost vezérlőben hosztolt Windows Forms-vezérlőtől egy ElementHost vezérlőig, amely ugyanazon WindowsFormsHost-ben van hosztolva.
Többszálú Minden többszálúsági módszer támogatott. A Windows Forms és a WPF technológiák egyaránt egyszálas egyidejűségi modellt feltételeznek. A hibakeresés során a más szálakból származó keretrendszerobjektumokra irányuló hívások kivételt képeznek a követelmény érvényesítése érdekében.
Biztonság Minden együttműködési forgatókönyv teljes megbízhatóságot igényel. Részleges megbízhatóság esetén nem engedélyezett az együttműködés.
Hozzáférhetőség Minden akadálymentességi forgatókönyv támogatott. A kisegítő technológiai termékek megfelelően működnek, ha windowsos űrlapokat és WPF-vezérlőket egyaránt tartalmazó hibrid alkalmazásokhoz használják őket. Nem alkalmazható.
Vágólap Minden vágólap művelet a szokásos módon működik. Ez magában foglalja a Windows Forms és a WPF vezérlők közötti vágást és beillesztést. Nem alkalmazható.
Húzd és ejtsd funkció Minden húzás és ejtési művelet a szokásos módon működik. Ide tartoznak a Windows Forms és a WPF-vezérlők közötti műveletek. Nem alkalmazható.

WPF-vezérlők üzemeltetése a Windows Formsban

A következő együttműködési forgatókönyvek támogatottak, ha egy Windows Forms-vezérlő WPF-vezérlőt üzemeltet:

  • Egy vagy több WPF-vezérlő üzemeltetése kóddal.

  • Tulajdonságlap társítása egy vagy több üzemeltetett WPF-vezérlővel.

  • Egy vagy több WPF-oldal üzemeltetése űrlapban.

  • WPF-ablak indítása.

  • Fő/részletű űrlap üzemeltetése windowsos űrlapok főkiszolgálójával és WPF-részleteivel.

  • Fő/részletű űrlap üzemeltetése WPF-főkiszolgálóval és Windows Forms-részletekkel.

  • Egyéni WPF-vezérlők üzemeltetése.

  • Hibrid vezérlők üzemeltetése.

Környezeti tulajdonságok

A Windows Forms-vezérlők néhány környezeti tulajdonsága WPF-ekvivalens. Ezek a környezeti tulajdonságok a üzemeltetett WPF-vezérlőkre vannak propagálva, és nyilvános tulajdonságokként jelennek meg a ElementHost vezérlőn. A ElementHost vezérlő minden Windows Forms környezeti tulajdonságot lefordít a WPF-ekvivalensére.

További információ: Windows Forms és WPF tulajdonságleképezés.

Magatartás

Az alábbi táblázat az együttműködési viselkedést ismerteti.

Magatartás Támogatott Nem támogatott
Átláthatóság A WPF-vezérlő renderelése támogatja az átláthatóságot. A szülő Windows Forms-vezérlő háttere a üzemeltetett WPF-vezérlők hátterévé válhat. Nem alkalmazható.
Többszálú Minden többszálúsági módszer támogatott. A Windows Forms és a WPF technológiák egyaránt egyszálas egyidejűségi modellt feltételeznek. A hibakeresés során a más szálakból származó keretrendszerobjektumokra irányuló hívások kivételt képeznek a követelmény érvényesítése érdekében.
Biztonság Minden együttműködési forgatókönyv teljes megbízhatóságot igényel. Részleges megbízhatóság esetén nem engedélyezett az együttműködés.
Hozzáférhetőség Minden akadálymentességi forgatókönyv támogatott. A kisegítő technológiai termékek megfelelően működnek, ha windowsos űrlapokat és WPF-vezérlőket egyaránt tartalmazó hibrid alkalmazásokhoz használják őket. Nem alkalmazható.
Vágólap Minden vágólap művelet a szokásos módon működik. Ez magában foglalja a Windows Forms és a WPF vezérlők közötti vágást és beillesztést. Nem alkalmazható.
Húzd és ejtsd funkció Minden húzás és ejtési művelet a szokásos módon működik. Ide tartoznak a Windows Forms és a WPF-vezérlők közötti műveletek. Nem alkalmazható.

Lásd még