Sdílet prostřednictvím


Předpoklady rozložení pro element WindowsFormsHost

Toto téma popisuje, jak WindowsFormsHost element komunikuje se systémem rozložení WPF.

WPF a model Windows Forms podporují různé, ale podobné logiky pro změnu velikosti a umístění prvků na formuláři nebo stránce. Když vytvoříte hybridní uživatelské rozhraní (UI), které hostuje model Windows Forms ovládací prvky ve WPF, WindowsFormsHost tento prvek integruje dvě schémata rozložení.

Rozdíly v rozložení mezi WPF a model Windows Forms

WPF používá rozložení nezávislé na rozlišení. Všechny rozměry rozložení WPF se zadají pomocí pixelů nezávislých na zařízeních. Pixel nezávislý na zařízení je jeden devadesátý šestý palec velikosti a rozlišení nezávislý, takže získáte podobné výsledky bez ohledu na to, jestli se vykresluje na monitor 72 dpi nebo na tiskárně s rozlišením 19 200 dpi.

WPF je také založen na dynamickém rozložení. To znamená, že prvek uživatelského rozhraní se uspořádá na formuláři nebo stránce podle jeho obsahu, nadřazeného kontejneru rozložení a dostupné velikosti obrazovky. Dynamické rozložení usnadňuje lokalizaci tím, že automaticky upraví velikost a pozici prvků uživatelského rozhraní, když řetězce, které obsahují délku změny.

Rozložení v model Windows Forms je závislé na zařízení a s větší pravděpodobností bude statické. Obvykle jsou ovládací prvky model Windows Forms umístěny zcela ve formuláři pomocí rozměrů zadaných v hardwarových pixelech. Model Windows Forms ale podporuje některé funkce dynamického rozložení, jak je shrnuto v následující tabulce.

Funkce rozložení Popis
Automatická velikost Některé model Windows Forms ovládací prvky mění velikost, aby se jejich obsah zobrazoval správně. Další informace naleznete v tématu Přehled vlastnosti AutoSize.
Ukotvení a ukotvení model Windows Forms ovládací prvky podporují umístění a změnu velikosti na základě nadřazeného kontejneru. Další informace najdete v tématech Control.Anchor a Control.Dock.
Automatické škálování Ovládací prvky kontejneru se mění podle rozlišení výstupního zařízení nebo velikosti výchozího písma kontejneru v pixelech. Další informace najdete v tématu Automatické škálování v model Windows Forms.
Kontejnery rozložení Ovládací FlowLayoutPanel prvky a TableLayoutPanel ovládací prvky uspořádávají své podřízené ovládací prvky a velikost samy podle jejich obsahu.

Omezení rozložení

Obecně platí, že ovládací prvky model Windows Forms nelze škálovat a transformovat v rozsahu možném ve WPF. Následující seznam popisuje známá omezení, když WindowsFormsHost se prvek pokusí integrovat hostovaný model Windows Forms ovládací prvek do systému rozložení WPF.

  • V některých případech nelze změnit velikost ovládacích prvků model Windows Forms nebo může mít velikost pouze pro konkrétní rozměry. Například ovládací prvek model Windows Forms ComboBox podporuje pouze jednu výšku, která je definována velikostí písma ovládacího prvku. V dynamickém rozložení WPF, kde se prvky můžou roztáhnout svisle, hostovaný ComboBox ovládací prvek se neroztáhne podle očekávání.

  • model Windows Forms ovládací prvky nelze otočit ani zkosit. Prvek WindowsFormsHost vyvolá LayoutError událost, pokud použijete nerovnoměrnou distribuci nebo transformaci otočení. Pokud událost nezpracujete LayoutError , InvalidOperationException vyvolá se událost.

  • Ve většině případů ovládací prvky model Windows Forms nepodporují proporcionální škálování. I když se celkové rozměry ovládacího prvku budou škálovat, podřízené ovládací prvky a prvky komponent ovládacího prvku nemusí měnit velikost podle očekávání. Toto omezení závisí na tom, jak dobře každý ovládací prvek model Windows Forms podporuje škálování. Kromě toho nemůžete škálovat model Windows Forms ovládací prvky na velikost 0 pixelů.

  • model Windows Forms ovládací prvky podporují automatické škálování, ve kterém formulář automaticky změní velikost samotného a jeho ovládacích prvků 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.

Pořadí vykreslová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ý model Windows Forms ovládací prvek je nakreslen v samostatném HWND, takže je vždy nakreslený nad prvky WPF.

Hostovaný ovládací prvek model Windows Forms je také nakreslen nad všemi Adorner prvky.

Chování rozložení

Následující části popisují konkrétní aspekty chování rozložení při hostování ovládacích prvků model Windows Forms ve WPF.

Škálování, převod jednotek a nezávislost zařízení

WindowsFormsHost Kdykoli prvek provádí operace zahrnující WPF a model Windows Forms rozměry, jsou zapojeny dva souřadnicové systémy: pixely nezávislé na zařízení pro WPF a hardwarové pixely pro model Windows Forms. Proto je nutné použít správné převody jednotek a škálování, abyste dosáhli konzistentního rozložení.

Převod mezi souřadnicovými systémy závisí na aktuálním rozlišení zařízení a na všech transformacích rozložení nebo vykreslování použitých na WindowsFormsHost prvek nebo na nadřazené prvky.

Pokud je výstupní zařízení 96 dpi a na prvek není použito WindowsFormsHost žádné škálování, je jeden pixel nezávislý na zařízení roven jednomu hardwarovému pixelu.

Všechny ostatní případy vyžadují škálování souřadnicového systému. Hostovaný ovládací prvek není změněný. Místo toho se WindowsFormsHost element pokusí škálovat hostovaný ovládací prvek a všechny jeho podřízené ovládací prvky. Vzhledem k tomu, že model Windows Forms plně nepodporuje škálování, WindowsFormsHost element se škáluje na úroveň podporovanou konkrétními ovládacími prvky.

Přepište metodu ScaleChild tak, aby poskytovala vlastní chování škálování pro hostovaný ovládací prvek model Windows Forms.

Kromě škálování WindowsFormsHost element zpracovává zaokrouhlování a přetečení případů, jak je popsáno v následující tabulce.

Problém s převodem Popis
Zaokrouhlení Rozměry pixelů nezávislé na zařízení WPF jsou zadány jako doublea model Windows Forms hardwarové pixelové rozměry jsou zadány jako int. V případech, kdy doublese dimenze založené na základech převedou na intdimenze založené na elementu, WindowsFormsHost používá standardní zaokrouhlování, aby se desetinné hodnoty menší než 0,5 zaokrouhlovaly dolů na 0.
Přetečení WindowsFormsHost Když prvek převede hodnoty double na int hodnoty, je možné přetečení. Hodnoty, které jsou větší, než MaxValue jsou nastaveny .MaxValue

Vlastnosti, které řídí chování rozložení v ovládacích prvcích model Windows Forms a elementech WPF jsou mapovány odpovídajícím způsobem elementemWindowsFormsHost. Další informace najdete v tématu model Windows Forms a mapování vlastností WPF.

Změny rozložení v hostovaném ovládacím prvku

Změny rozložení v hostované model Windows Forms ovládacím prvku se rozšíří do WPF, aby se aktivovaly aktualizace rozložení. Metoda InvalidateMeasure zajišťuje WindowsFormsHost , že změny rozložení v hostované ovládací prvek způsobí spuštění modulu rozložení WPF.

Ovládací prvky model Windows Forms s nepřetržitou velikostí

model Windows Forms ovládací prvky, které podporují průběžné škálování, plně pracují se systémem rozložení WPF. Element WindowsFormsHost používá metody MeasureOverride a ArrangeOverride metody jako obvykle k velikosti a uspořádání hostovaného model Windows Forms ovládacího prvku.

Algoritmus určení velikosti

Element WindowsFormsHost používá následující postup k nastavení velikosti hostovaného ovládacího prvku:

  1. Element WindowsFormsHost přepíše MeasureOverride a ArrangeOverride metody.

  2. Chcete-li určit velikost hostovaného ovládacího prvku, MeasureOverride metoda volá metodu hostovaného ovládacího prvku GetPreferredSize s omezením přeloženým z omezení předaného metodě MeasureOverride .

  3. Metoda ArrangeOverride se pokusí nastavit hostovaný ovládací prvek na dané omezení velikosti.

  4. Pokud vlastnost hostovaného ovládacího prvku Size odpovídá zadanému omezení, má hostovaný ovládací prvek velikost omezení.

Pokud se Size vlastnost neshoduje se zadaným omezením, hostovaný ovládací prvek nepodporuje průběžnou změnu velikosti. Ovládací prvek například MonthCalendar umožňuje pouze samostatné velikosti. Povolené velikosti tohoto ovládacího prvku se skládají z celých čísel (představující počet měsíců) pro výšku i šířku. V takových případech WindowsFormsHost se element chová takto:

  • Size Pokud vlastnost vrátí větší velikost než zadané omezení, WindowsFormsHost element vystřihne hostovaný ovládací prvek. Výška a šířka se zpracovávají samostatně, takže hostovaný ovládací prvek může být oříznut v obou směrech.

  • Size Pokud vlastnost vrátí menší velikost než zadané omezení, WindowsFormsHost přijme tuto hodnotu velikosti a vrátí hodnotu systému rozložení WPF.

Viz také