Automatické škálování (model Windows Forms .NET)
Automatické škálování umožňuje, aby se formulář a jeho ovládací prvky navržené na jednom počítači s určitým rozlišením nebo písmem zobrazovaly odpovídajícím způsobem na jiném počítači s jiným rozlišením zobrazení nebo písmem. Zaručuje, že formulář a jeho ovládací prvky budou inteligentně měnit velikost tak, aby byly konzistentní s nativními okny a dalšími aplikacemi na počítačích uživatelů i jiných vývojářů. Automatické škálování a vizuální styly umožňují model Windows Forms aplikacím udržovat konzistentní vzhled a chování v porovnání s nativními aplikacemi pro Windows na počítači každého uživatele.
Ve většině případů automatické škálování funguje podle očekávání v model Windows Forms. Změny schématu písem ale můžou být problematické.
Potřeba automatického škálování
Bez automatického škálování se aplikace navržená pro jedno rozlišení zobrazení nebo písmo při změně rozlišení nebo písma zobrazí příliš malá nebo příliš velká. Pokud je například aplikace navržena pomocí tahoma 9 bodu jako směrného plánu, bez úpravy se zobrazí příliš malá, pokud běží na počítači, kde je systémové písmo Tahoma 12 bod. Textové prvky, jako jsou názvy, nabídky, obsah textového pole atd., se vykreslí menší než jiné aplikace. Velikost prvků uživatelského rozhraní(UI), které obsahují text, například záhlaví, nabídky a mnoho ovládacích prvků, závisí na použitém písmu. V tomto příkladu se tyto prvky zobrazí také relativně menší.
Analogická situace nastane, když je aplikace navržena pro určité rozlišení zobrazení. Nejběžnější rozlišení displeje je 96 bodů na palec (DPI), které se rovná 100% měřítku zobrazení, ale vyšší rozlišení podporuje 125 %, 150 %, 200 % (což se v uvedeném pořadí rovná 120, 144 a 192 DPI) a vyšší jsou stále častější. Bez úprav se aplikace, zejména grafika, navržená pro jedno rozlišení, zobrazí příliš velký nebo příliš malý při spuštění v jiném rozlišení.
Automatické škálování se snaží tyto problémy vyřešit automatickým změnou velikosti formuláře a jeho podřízených ovládacích prvků podle relativní velikosti písma nebo rozlišení zobrazení. Operační systém Windows podporuje automatické škálování dialogových oken pomocí relativní měrné jednotky označované jako jednotky dialogových oken. Jednotka dialogového okna je založena na systémovém písmu a jeho vztahu k pixelům lze určit, i když funkce GetDialogBaseUnits
Win32 SDK . Když uživatel změní motiv používaný systémem Windows, všechna dialogová okna se automaticky upraví odpovídajícím způsobem. Kromě toho model Windows Forms podporuje automatické škálování podle výchozího systémového písma nebo rozlišení zobrazení. Volitelně je možné automatické škálování zakázat v aplikaci.
Upozornění
Nepodporují se libovolné kombinace režimů DPI a škálování písma. I když můžete uživatelský ovládací prvek škálovat pomocí jednoho režimu (například DPI) a umístit ho do formuláře pomocí jiného režimu (písmo) bez problémů, ale kombinování základního formuláře v jednom režimu a odvozené formuláře v jiném může vést k neočekávaným výsledkům.
Automatické škálování v akci
model Windows Forms používá k automatickému škálování formulářů a jejich obsahu následující logiku:
V době návrhu každý ContainerControl zaznamenává režim škálování a aktuální rozlišení v AutoScaleMode AutoScaleDimensionsa v uvedeném pořadí.
V době běhu se skutečné rozlišení uloží do CurrentAutoScaleDimensions vlastnosti. Vlastnost AutoScaleFactor dynamicky vypočítá poměr mezi řešením škálování za běhu a návrhem.
Při načtení formuláře, pokud hodnoty CurrentAutoScaleDimensions a AutoScaleDimensions jsou odlišné, pak PerformAutoScale metoda je volána ke škálování ovládacího prvku a jeho podřízených položek. Tato metoda pozastaví rozložení a zavolá metodu Scale k provedení skutečného škálování. Následně se hodnota aktualizuje, aby se zabránilo postupnému AutoScaleDimensions škálování.
PerformAutoScale se také automaticky vyvolá v následujících situacích:
V reakci na OnFontChanged událost, pokud je Fontrežim škálování .
Když se rozložení ovládacího prvku kontejneru obnoví a ve vlastnostech se zjistí AutoScaleDimensions AutoScaleMode změna.
Jak je uvedeno výše, když se škáluje nadřazený ContainerControl objekt. Každý ovládací prvek kontejneru zodpovídá za škálování podřízených položek pomocí vlastních faktorů škálování, nikoli za to, co pochází z nadřazeného kontejneru.
Podřízené ovládací prvky můžou měnit chování škálování několika způsoby:
ScaleChildren Vlastnost lze přepsat, aby bylo možné určit, zda mají být jejich podřízené ovládací prvky škálovány nebo ne.
Metodu GetScaledBounds lze přepsat tak, aby se upravily hranice, na které se ovládací prvek škáluje, ale ne na logiku škálování.
Metodu ScaleControl lze přepsat, aby se změnila logika škálování pro aktuální ovládací prvek.
Viz také
.NET Desktop feedback