Sdílet prostřednictvím


Spolupráce WPF a Windows Forms

WPF a Windows Forms představují dvě různé architektury pro vytváření aplikačních rozhraní. Obor System.Windows.Forms.Integration názvů poskytuje třídy, které umožňují běžné scénáře spolupráce. Dvě klíčové třídy, které implementují interoperační schopnosti jsou WindowsFormsHost a ElementHost. Toto téma popisuje, které scénáře spolupráce se podporují a které scénáře se nepodporují.

Poznámka:

Ke scénáři hybridního řízení se přiděluje zvláštní pozornost. Hybridní ovládací prvek má ovládací prvek z jedné technologie vnořené do ovládacího prvku z druhé technologie. To se také označuje jako vnořená spolupráce. Víceúrovňový hybridní ovládací prvek má více než jednu úroveň vnoření hybridního řízení. Příkladem víceúrovňové vzájemné spolupráce je ovládací prvek Windows Forms, který obsahuje ovládací prvek WPF, který obsahuje jiný ovládací prvek Windows Forms. Víceúrovňové hybridní ovládací prvky nejsou podporovány.

Hostování ovládacích prvků Windows Forms ve WPF

Pokud ovládací prvek WPF hostuje ovládací prvek Windows Forms, podporují se následující scénáře spolupráce:

  • Ovládací prvek WPF může hostovat jeden nebo více ovládacích prvků Windows Forms pomocí XAML.

  • Může hostovat jeden nebo více ovládacích prvků Windows Forms pomocí kódu.

  • Může hostovat ovládací prvky kontejneru Windows Forms, které obsahují další ovládací prvky Windows Forms.

  • Může hostovat formulář typu master/detail, kde hlavním je WPF a podrobnostmi jsou Windows Forms.

  • Může hostovat hlavní/podrobný formulář s hlavním formulářem Windows Forms a podrobnostmi WPF.

  • Může hostovat jeden nebo více ovládacích prvků ActiveX.

  • Může hostovat jeden nebo více složených ovládacích prvků.

  • Může hostovat hybridní ovládací prvky pomocí jazyka XAML (Extensible Application Markup Language).

  • Může hostovat hybridní ovládací prvky pomocí kódu.

Podpora rozložení

Následující seznam popisuje známá omezení, když se WindowsFormsHost element pokusí integrovat hostovaný ovládací prvek Windows Forms do systému rozložení WPF.

  • V některých případech nelze změnit velikost ovládacích prvků Windows Forms nebo je lze nastavit pouze na konkrétní rozměry. Například ovládací prvek Windows Forms ComboBox podporuje pouze jednu výšku, která je definovaná velikostí písma ovládacího prvku. V dynamickém rozložení WPF, kde se předpokládá, že prvky se mohou natahovat svisle, se hostovaný ComboBox ovládací prvek nebude natahovat podle očekávání.

  • Ovládací prvky Windows Forms nelze otočit ani zkosit. Když například otočíte uživatelské rozhraní o 90 stupňů, hostované ovládací prvky Windows Forms budou udržovat jejich vzpřímenou polohu.

  • Ve většině případů ovládací prvky Windows Forms nepodporují proporcionální škálování. Ačkoli se celkové rozměry ovládacího prvku upraví, podřízené ovládací prvky a komponenty ovládacího prvku nemusí měnit velikost tak, jak by bylo očekáváno. Toto omezení závisí na tom, jak dobře každý ovládací prvek Windows Forms podporuje škálování.

  • V uživatelském rozhraní WPF můžete změnit pořadí vykreslování prvků a řídit překrývající se chování. Hostovaný ovládací prvek Windows Forms je zobrazen v samostatném HWND, takže se vždy zobrazuje nad prvky WPF.

  • Ovládací prvky Windows Forms podporují automatické škálování na základě velikosti písma. V uživatelském rozhraní WPF změna velikosti písma nezmění velikost celého rozložení, i když se jednotlivé prvky můžou dynamicky měnit.

Okolí – vlastnosti

Některé okolní vlastnosti ovládacích prvků WPF mají ekvivalenty modelu Windows Forms. Tyto okolní vlastnosti se rozšíří do hostovaných ovládacích prvků Windows Forms a zobrazí se jako veřejné vlastnosti WindowsFormsHost ovládacího prvku. Ovládací WindowsFormsHost prvek přeloží každou vlastnost okolí WPF na jeho ekvivalent Windows Forms.

Další informace najdete pod odkazem Mapování vlastností pro Windows Forms a WPF.

Chování

Následující tabulka popisuje chování spolupráce.

Chování Podporováno Není podporováno
Průhlednost Vykreslování ovládacích prvků Windows Forms podporuje průhlednost. Pozadí nadřazeného ovládacího prvku WPF se může stát pozadím hostovaných ovládacích prvků Windows Forms. Některé ovládací prvky Windows Forms nepodporují průhlednost. Například ovládací prvky TextBox a ComboBox nebudou při hostování ve WPF transparentní.
Tabování Pořadí karet pro hostované ovládací prvky Windows Forms je stejné jako v případě, že jsou tyto ovládací prvky hostované v aplikaci Windows Forms.

Přecházení pomocí klávesy TAB z ovládacího prvku WPF na ovládací prvek Windows Forms a pomocí kombinace kláves SHIFT+TAB funguje obvykle.

Ovládací prvky Windows Forms, které mají hodnotu vlastnosti TabStopfalse, nezískají fokus, když uživatel prochází ovládací prvky pomocí klávesy Tab.

– Každý WindowsFormsHost ovládací prvek má TabIndex hodnotu, která určuje, kdy tento WindowsFormsHost ovládací prvek obdrží fokus.
– Ovládací prvky Windows Forms, které jsou obsaženy v kontejneru WindowsFormsHost , se řídí pořadím určeným TabIndex vlastností. Přechod pomocí klávesy Tab z posledního indexu zaměří na další prvek WPF, pokud existuje. Pokud neexistuje žádný jiný fokusovatelný ovládací prvek WPF, vrátí se tabbing na první ovládací prvek Windows Forms v pořadí ovládacích prvků.
- TabIndex hodnoty ovládacích prvků uvnitř WindowsFormsHost jsou relativní vzhledem k sourozeným ovládacím prvkům modelu Windows Forms, které jsou obsaženy v ovládacím prvku WindowsFormsHost.
- Tabbing respektuje chování specifické pro ovládání. Například stisknutím klávesy TAB v ovládacím prvku TextBox, který má vlastnost AcceptsTab s hodnotou true, zadá tabulátor do textového pole místo přesunu zaměření.
Nelze použít.
Navigace pomocí kláves se šipkami - Navigace pomocí kláves se šipkami v ovládacím WindowsFormsHost prvku je stejná jako v běžném ovládacím prvku kontejneru Windows Forms: Klávesy ŠIPKA NAHORU a ŠIPKA VLEVO vyberte předchozí ovládací prvek a klávesy ŠIPKA DOLŮ a ŠIPKA VPRAVO vyberte další ovládací prvek.
- Klávesy ŠIPKA NAHORU a ŠIPKA VLEVO od prvního ovládacího prvku obsaženého v ovládacím WindowsFormsHost prvku provádějí stejnou akci jako klávesová zkratka SHIFT+TAB. Pokud je fokusovatelný ovládací prvek WPF, fokus se přesune mimo ovládací prvek WindowsFormsHost. Toto chování se liší od standardního ContainerControl chování tím, že nedochází k přechodu zpět na poslední ovládací prvek. Pokud neexistuje žádný jiný fokusovatelný ovládací prvek WPF, fokus se vrátí na poslední ovládací prvek Windows Forms v pořadí ovládacích prvků.
- Klávesy ŠIPKA DOLŮ a ŠIPKA VPRAVO v rámci posledního ovládacího prvku obsaženého v ovládacím WindowsFormsHost prvku provádějí stejnou akci jako klávesa TAB. Pokud je fokusovatelný ovládací prvek WPF, fokus se přesune mimo ovládací prvek WindowsFormsHost. Toto chování se liší od standardního ContainerControl chování v tom, že nedojde k žádnému zabalení na první ovládací prvek. Pokud neexistuje žádný jiný fokusovatelný ovládací prvek WPF, fokus se vrátí na první ovládací prvek Windows Forms v pořadí záložek.
Nelze použít.
Urychlovače Akcelerátory fungují obvyklým způsobem, s výjimkou případů, kdy je uvedeno ve sloupci Nepodporováno. Duplicitní akcelerátory napříč technologiemi nefungují jako běžné duplicitní akcelerátory. Pokud je akcelerátor duplikován napříč technologiemi, přičemž alespoň jeden je v ovládacím prvku Windows Forms a druhý v ovládacím prvku WPF, ovládací prvek Windows Forms vždy přijímá akcelerátor. Fokus nepřepíná mezi ovládacími prvky při stisknutí duplicitního akcelerátoru.
Klávesové zkratky Klávesové zkratky fungují obvyklým způsobem, s výjimkou případů, kdy je uvedeno ve sloupci Nepodporováno. – Klávesové zkratky Windows Forms, které se zpracovávají ve fázi předběžného zpracování, mají vždy přednost před klávesovými zkratkami WPF. Například, pokud máte ToolStrip ovládací prvek s definovanými klávesovými zkratkami CTRL+S, a existuje příkaz WPF vázaný na CTRL+S, ToolStrip obslužná rutina ovládacího prvku se vždy vyvolá jako první, bez ohledu na fokus.
– Klávesové zkratky Modelu Windows Forms, které jsou zpracovávány událostí KeyDown , se zpracovávají naposledy ve WPF. Můžete tomuto chování předcházet přepsáním metody ovládacího prvku Windows Forms IsInputKey nebo ošetřením události PreviewKeyDown. Vraťte true z metody IsInputKey nebo nastavte hodnotu vlastnosti PreviewKeyDownEventArgs.IsInputKey na true v obslužné rutině události PreviewKeyDown.
PřijímáReturn, AcceptsTab a další chování specifické pro ovládací prvky Vlastnosti, které mění výchozí chování klávesnice, plní svoji funkci jako obvykle, za předpokladu, že ovládací prvek Windows Forms přepíše metodu IsInputKey tak, aby vrátila true. Ovládací prvky Windows Forms, které mění výchozí chování klávesnice zpracováním KeyDown události, se zpracovávají naposledy v hostitelském ovládacím prvku WPF. Vzhledem k tomu, že tyto ovládací prvky se zpracovávají jako poslední, můžou způsobit neočekávané chování.
Zadávání a opuštění událostí Když fokus nepřejde na obsahující ovládací prvek ElementHost, události Enter a Leave jsou při změně fokusu v jediném ovládacím prvku WindowsFormsHost vyvolány obvyklým způsobem. Události Enter a Leave nejsou vyvolány, když dojde k následujícím změnám fokusu:

- Z vnitřku na vnějšek WindowsFormsHost ovládacího prvku.
- Zvenku dovnitř WindowsFormsHost ovládacího prvku.
- Mimo WindowsFormsHost kontrolu.
- Z ovládacího prvku Windows Forms hostovaného v ovládacím WindowsFormsHost prvku na jiný hostovaný ElementHost ovládací prvek ve stejném WindowsFormsHost.
Vícevláknové zpracování Podporují se všechny odrůdy multithreadingu. Technologie Windows Forms i WPF předpokládají model souběžnosti s jedním vláknem. Během ladění vyvolá volání objektů architektury z jiných vláken výjimku pro vynucení tohoto požadavku.
Bezpečnost Všechny scénáře spolupráce vyžadují úplný vztah důvěryhodnosti. V částečném vztahu důvěryhodnosti nejsou povoleny žádné scénáře spolupráce.
Přístupnost Podporují se všechny scénáře přístupnosti. Produkty technologie usnadnění fungují správně, když se používají pro hybridní aplikace, které obsahují ovládací prvky Windows Forms i WPF. Nelze použít.
Schránka Všechny operace se schránkou fungují obvyklým způsobem. To zahrnuje vyjmutí a vložení mezi ovládacími prvky Windows Forms a WPF. Nelze použít.
Funkce přetažení a vložení Všechny operace přetažení fungují obvyklým způsobem. To zahrnuje operace mezi ovládacími prvky Windows Forms a WPF. Nelze použít.

Hostování ovládacích prvků WPF ve Windows Forms

Pokud je ovládací prvek Windows Forms hostitelem ovládacího prvku WPF, podporují se následující scénáře spolupráce:

  • Hostování jednoho nebo více ovládacích prvků WPF pomocí kódu

  • Přidružení seznamu vlastností k jednomu nebo více hostovaným ovládacím prvkům WPF

  • Hostování jedné nebo více stránek WPF ve formuláři

  • Spuštění okna WPF

  • Hostování formuláře master/detail s Windows Forms masterem a detaily WPF.

  • Hostování hlavního/podrobného formuláře s hlavním serverem WPF a podrobnostmi Windows Forms

  • Hostování vlastních ovládacích prvků WPF

  • Hostování hybridních ovládacích prvků

Okolí – vlastnosti

Některé okolní vlastnosti ovládacích prvků Windows Forms mají ekvivalenty WPF. Tyto okolní vlastnosti se rozšíří do hostovaných ovládacích prvků WPF a zobrazí se jako veřejné vlastnosti ElementHost ovládacího prvku. Ovládací ElementHost prvek přeloží každou vlastnost prostředí Windows Forms na odpovídající vlastnost ve WPF.

Další informace najdete pod odkazem Mapování vlastností pro Windows Forms a WPF.

Chování

Následující tabulka popisuje chování spolupráce.

Chování Podporováno Není podporováno
Průhlednost Vykreslování ovládacích prvků WPF podporuje průhlednost. Pozadí nadřazeného ovládacího prvku Windows Forms se může stát pozadím hostovaných ovládacích prvků WPF. Nelze použít.
Vícevláknové zpracování Podporují se všechny odrůdy multithreadingu. Technologie Windows Forms i WPF předpokládají model souběžnosti s jedním vláknem. Během ladění vyvolá volání objektů architektury z jiných vláken výjimku pro vynucení tohoto požadavku.
Bezpečnost Všechny scénáře spolupráce vyžadují úplný vztah důvěryhodnosti. V částečném vztahu důvěryhodnosti nejsou povoleny žádné scénáře spolupráce.
Přístupnost Podporují se všechny scénáře přístupnosti. Produkty technologie usnadnění fungují správně, když se používají pro hybridní aplikace, které obsahují ovládací prvky Windows Forms i WPF. Nelze použít.
Schránka Všechny operace se schránkou fungují obvyklým způsobem. To zahrnuje vyjmutí a vložení mezi ovládacími prvky Windows Forms a WPF. Nelze použít.
Funkce přetažení a vložení Všechny operace přetažení fungují obvyklým způsobem. To zahrnuje operace mezi ovládacími prvky Windows Forms a WPF. Nelze použít.

Viz také