Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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. |
Elrendezéssel kapcsolatos tulajdonságok
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:
Az WindowsFormsHost elem felülírja a MeasureOverride és ArrangeOverride metódusokat.
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.
A ArrangeOverride metódus megkísérli beállítani a üzemeltetett vezérlőt a megadott méretkényszerre.
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
.NET Desktop feedback