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


A WindowsFormsHost elem elrendezési szempontjai

Ez a témakör azt ismerteti, hogyan működik az WindowsFormsHost elem a WPF-elrendezési rendszerrel.

A WPF és a Windows Forms különböző, de hasonló logikát támogat az elemek űrlapokon vagy oldalakon való méretezéséhez és elhelyezéséhez. Amikor létrehoz egy hibrid felhasználói felületet (UI), amely Windows Forms-vezérlőket üzemeltet a WPF-ben, az WindowsFormsHost elem integrálja a két elrendezési sémát.

A WPF és a Windows-űrlapok elrendezésének eltérései

A WPF felbontásfüggetlen elrendezést használ. Az összes WPF-elrendezési dimenzió eszközfüggetlen képpontokkal van megadva. Az eszközfüggetlen képpont egy kilencvenhatod hüvelyk méretű, és felbontásfüggetlen, így hasonló eredmények érhetők el attól függetlenül, hogy 72 dpi-s monitorra vagy 19 200 dpi-s nyomtatóra renderel.

A WPF a dinamikus elrendezésen is alapul. Ez azt jelenti, hogy egy felhasználói felületi elem a tartalom, a szülőelrendezés tárolója és a rendelkezésre álló képernyőméret alapján rendezi magát egy űrlapon vagy lapon. A dinamikus elrendezés megkönnyíti a honosítást azáltal, hogy automatikusan módosítja a felhasználói felület elemeinek méretét és pozícióját, amikor az általuk tartalmazott sztringek módosítják a hosszt.

A Windows Forms elrendezése eszközfüggő, és nagyobb valószínűséggel statikus. A Windows Forms vezérlői általában teljesen egy űrlapon vannak elhelyezve a hardver képpontokban megadott dimenziók használatával. A Windows Forms azonban támogatja a dinamikus elrendezés néhány funkcióját, amint azt az alábbi táblázat összefoglalja.

Elrendezési funkció Leírás
Automatikus méretezés Egyes Windows Forms-vezérlők átméretezik magukat, hogy megfelelően jelenjenek meg a tartalmaik. További információért lásd: AutoSize tulajdonság áttekintése.
Rögzítés és dokkolás A Windows Forms-vezérlők támogatják a szülőtároló alapján történő elhelyezést és méretezést. További információ: Control.Anchor és Control.Dock.
Automatikus skálázás A konténervezérlők átméretezik magukat és gyermekeiket a kimeneti eszköz felbontása vagy az alapértelmezett betűtípus képpontban kifejezett mérete alapján. További információ: Automatikus skálázás a Windows Formsban.
Elrendezési tárolók A FlowLayoutPanel és TableLayoutPanel vezérlők elrendezik a gyermekvezérlőiket, és a tartalmaikhoz igazítják méretüket.

Elrendezési korlátozások

A Windows Forms vezérlői általában nem skálázhatók és alakíthatók át a WPF-ben a lehető legnagyobb mértékben. 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, ahol az elemek függőlegesen nyúlhatnak, az üzemeltetett ComboBox vezérlők nem nyúlnak majd ki a vártaknak megfelelően.

  • A Windows Forms vezérlői nem forgathatók és nem állíthatók el. Az WindowsFormsHost elem kiváltja a LayoutError eseményt, ha ferde vagy forgatási átalakítást alkalmazunk. Ha nem kezeli az eseményt LayoutError , a rendszer előhoz egy InvalidOperationException eseményt.

  • 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. Emellett a Windows Forms-vezérlőket nem lehet 0 képpont méretűre skálázni.

  • A Windows Forms vezérlői támogatják az automatikus skálázást, amelyben az űrlap automatikusan átméretezi magát és vezérlőit 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.

Z-rendelés

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.

Beágyazott Windows Forms-vezérlőt is a rendszer minden Adorner elem fölé rajzol.

Elrendezés viselkedése

Az alábbi szakaszok a Windows Forms-vezérlők WPF-ben való üzemeltetése esetén az elrendezés viselkedésének konkrét aspektusait ismertetik.

Skálázás, egységátalakítás és eszközfüggetlenség

Amikor az WindowsFormsHost elem WPF- és Windows Forms-dimenziókkal kapcsolatos műveleteket hajt végre, két koordinátarendszerről van szó: a WPF eszközfüggetlen képpontjairól és a Windows Forms hardveres képpontjairól. Ezért a konzisztens elrendezés eléréséhez megfelelő egységeket és méretezési átalakításokat kell alkalmaznia.

A koordinátarendszerek közötti átalakítás az eszköz aktuális felbontásától, valamint az elemre vagy elődeire WindowsFormsHost alkalmazott elrendezés- vagy renderelési átalakításoktól függ.

Ha a kimeneti eszköz 96 dpi méretű, és nem alkalmazott skálázást az WindowsFormsHost elemre, egy eszközfüggetlen képpont egyenlő egy hardver képponttal.

Minden más esetben koordinátarendszer-skálázásra van szükség. Az üzemeltetett vezérlő nincs átméretezve. Ehelyett az WindowsFormsHost elem megpróbálja skálázni az üzemeltetett vezérlőt és annak összes gyermekvezérlőjét. Mivel a Windows Forms nem támogatja teljes mértékben a skálázást, az WindowsFormsHost elem az adott vezérlők által támogatott mértékben skálázható.

Felülbírálja a ScaleChild metódust, hogy egyéni skálázási viselkedést biztosítson a üzemeltetett Windows Forms-vezérlőhöz.

A skálázás mellett a WindowsFormsHost elem a kerekítési és túlcsordulási eseteket az alábbi táblázatban leírtak szerint kezeli.

Átalakítással kapcsolatos probléma Leírás
Kerekítés A WPF eszközfüggetlen képpontméretei a következőképpen vannak megadva double, a Windows Forms hardveres képpontméretei pedig a intkövetkezőképpen vannak megadva. Azokban az esetekben, amikor double-alapú dimenziók lesznek átalakítva -alapú dimenziókká int, az WindowsFormsHost elem szabványos kerekítést használ, hogy a 0,5-nél kisebb törtértékek 0-ra legyenek kerekítve.
Túlcsordulás Amikor az WindowsFormsHost elem double értékekről int értékekre alakul át, túlcsordulás lehetséges. Azok az értékek, amelyek nagyobbak, mint MaxValue, a MaxValue értékre vannak állítva.

A Windows Forms-vezérlők és a WPF-elemek elrendezési viselkedését vezérlő tulajdonságokat a WindowsFormsHost elem megfelelően leképezi. További információ: Windows Forms és WPF tulajdonságleképezés.

Elrendezésváltozások az üzemeltetett vezérlőben

Az üzemeltetett Windows Forms vezérlő elrendezésmódosításait a rendszer a WPF-be propagálja az elrendezésfrissítések aktiválásához. A InvalidateMeasure metódus biztosítja, hogy a WindowsFormsHost által tárolt vezérlő elrendezésváltozásai a WPF elrendezési motor futtatását eredményezzék.

Folyamatosan méretezett Windows-űrlapvezérlők

A folyamatos skálázást támogató Windows Forms-vezérlők teljes mértékben együttműködnek a WPF-elrendezési rendszerrel. Az WindowsFormsHost elem a szokásos módon használja az MeasureOverride és ArrangeOverride módszereket az üzemeltetett Windows Forms vezérlő méretének és elrendezésének kialakítására.

Méretezési algoritmus

Az WindowsFormsHost elem a következő eljárással méretezi a üzemeltetett vezérlőt:

  1. Az WindowsFormsHost elem felülírja a MeasureOverride és ArrangeOverride metódusokat.

  2. Az üzemeltetett vezérlő méretének meghatározásához a MeasureOverride metódus meghívja az üzemeltetett vezérlő GetPreferredSize metódusát, és ehhez a MeasureOverride metódusnak átadott kényszerből lefordított kényszert használja.

  3. A ArrangeOverride metódus megkísérli beállítani a üzemeltetett vezérlőt a megadott méretkényszerre.

  4. Ha az üzemeltetett vezérlőelem tulajdonsága Size megfelel a megadott korlátozásnak, akkor a kihelyezett vezérlőelem a korlátozáshoz lesz méretezve.

Ha a Size tulajdonság nem felel meg a megadott korlátozásnak, a üzemeltetett vezérlő nem támogatja a folyamatos méretezést. A vezérlő például MonthCalendar csak különálló méreteket engedélyez. A vezérlőelem megengedett méretei egész számokból állnak (amelyek a hónapok számát jelölik) mind a magasság, mind a szélesség tekintetében. Ilyen esetekben az elem a WindowsFormsHost következőképpen viselkedik:

  • Ha a Size tulajdonság a megadott korlátnál nagyobb méretet ad vissza, az WindowsFormsHost elem levágja az üzemeltetett vezérlőt. A magasság és a szélesség külön van kezelve, így az üzemeltetett vezérlő mindkét irányban levágható.

  • Ha a tulajdonság a Size megadott korlátnál kisebb méretet ad vissza, elfogadja ezt a méretértéket, WindowsFormsHost és visszaadja az értéket a WPF-elrendezési rendszernek.

Lásd még