Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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í aplikacím Modelu Windows 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.
Automatické škálování ve většině případů funguje podle očekávání ve Windows Forms. Změny schématu písem ale můžou být problematické. Příklad řešení tohoto problému najdete v tématu Postupy: Reakce na změny schématu písem v aplikaci Windows Forms.
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á. Například, je-li aplikace navržena s použitím Tahoma 9 bodů jako základní linie, bez úprav bude příliš malá, pokud poběží na počítači se systémovým písmem Tahoma 12 bodů. Textové prvky, jako jsou názvy, nabídky, obsah textových polí a podobně, se zobrazí menší než v jiných aplikacích. 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), což odpovídá měřítku zobrazení 100%. Displeje s vyšším rozlišením, které podporují 125%, 150%, 200% (což se rovná 120, 144 a 192 DPI) a vyšší, jsou stále běžnější. Bez úprav se aplikace, zejména ta, která je založená na grafice, navržená pro jedno rozlišení, zobrazí buď jako příliš velká nebo jako příliš malá, když je spuštěna na 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 její vztah k pixelům lze určit pomocí funkce Win32 SDK GetDialogBaseUnits
. Když uživatel změní motiv používaný systémem Windows, všechna dialogová okna se automaticky upraví odpovídajícím způsobem. Windows Forms navíc 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
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 jeho aktuální rozlišení v AutoScaleMode a AutoScaleDimensions.
V době běhu je skutečné rozlišení uloženo ve vlastnosti CurrentAutoScaleDimensions. Vlastnost AutoScaleFactor dynamicky vypočítá poměr mezi rozlišením škálování za běhu a rozlišením při návrhu.
Při načtení formuláře, pokud jsou hodnoty CurrentAutoScaleDimensions a AutoScaleDimensions odlišné, je volána metoda PerformAutoScale pro škálování ovládacího prvku a jeho podřízených prvků. Tato metoda pozastaví rozložení a zavolá metodu Scale k provedení skutečného škálování. Následně se aktualizuje hodnota AutoScaleDimensions, aby se zabránilo progresivnímu škálování.
PerformAutoScale se také automaticky vyvolá v následujících situacích:
V reakci na událost OnFontChanged, pokud je režim škálování Font.
Když se rozložení ovládacího prvku kontejneru obnoví a ve vlastnostech AutoScaleDimensions nebo AutoScaleMode se zjistí změna.
Jak vyplývá z výše uvedeného, když se nadřazený ContainerControl škáluje. Každý ovládací prvek kontejneru zodpovídá za škálování podřízených položek pomocí vlastních faktorů škálování a ne toho z nadřazeného kontejneru.
Podřízené prvky ovládání mohou měnit způsob svého škálování několika způsoby:
Vlastnost ScaleChildren lze přepsat, aby bylo možné určit, jestli 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