Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
La scalabilità automatica consente di visualizzare in modo appropriato un modulo e i relativi controlli, progettati in un computer con una certa risoluzione o tipo di carattere di visualizzazione, in un altro computer con una risoluzione o un tipo di carattere diversi. Garantisce che il form e i relativi controlli vengano ridimensionati in modo intelligente in modo da essere coerenti con le finestre native e altre applicazioni nei computer degli utenti e di altri sviluppatori. Il ridimensionamento automatico e gli stili di visualizzazione consentono alle applicazioni Windows Form di mantenere un aspetto coerente rispetto alle applicazioni Windows native nel computer di ogni utente.
Per la maggior parte, la scalabilità automatica funziona come previsto in Windows Form. Tuttavia, le modifiche apportate allo schema dei tipi di carattere possono essere problematiche. Per un esempio di come risolvere questo problema, vedere Procedura: Rispondere alle modifiche dello schema dei tipi di carattere in un'applicazione Windows Form.
Necessità di ridimensionamento automatico
Senza ridimensionamento automatico, un'applicazione progettata per una risoluzione dello schermo o un tipo di carattere risulterà troppo piccola o troppo grande quando la risoluzione o il tipo di carattere viene modificato. Ad esempio, se l'applicazione è progettata usando Tahoma 9 punti come linea di base, senza regolazioni, apparirà troppo piccola se eseguita su un computer su cui il tipo di carattere di sistema è a Tahoma 12 punti. Gli elementi di testo, come titoli, menu, contenuti delle caselle di testo e così via, saranno visualizzati più piccoli rispetto ad altre applicazioni. Inoltre, le dimensioni degli elementi dell'interfaccia utente che contengono testo, ad esempio la barra del titolo, i menu e molti controlli dipendono dal tipo di carattere usato. In questo esempio, questi elementi appariranno anche relativamente più piccoli.
Una situazione analoga si verifica quando un'applicazione è progettata per una determinata risoluzione dello schermo. La risoluzione di visualizzazione più comune è di 96 punti per pollice (DPI), che è uguale a 100% ridimensionamento dello schermo, ma una risoluzione superiore visualizza il supporto di 125%, 150%, 200% (rispettivamente uguale a 120, 144 e 192 DPI) e versioni successive stanno diventando più comuni. Senza regolazione, un'applicazione, in particolare una grafica, progettata per una risoluzione apparirà troppo grande o troppo piccola quando viene eseguita in un'altra risoluzione.
Il ridimensionamento automatico cerca di risolvere questi problemi ridimensionando automaticamente il modulo e i relativi controlli figlio in base alle dimensioni relative del carattere o alla risoluzione dello schermo. Il sistema operativo Windows supporta il ridimensionamento automatico delle finestre di dialogo usando un'unità di misura relativa denominata unità di dialogo. Un'unità di dialogo si basa sul tipo di carattere di sistema e la relativa relazione con i pixel può essere determinata tramite la funzione Win32 SDK GetDialogBaseUnits
. Quando un utente modifica il tema utilizzato da Windows, tutte le finestre di dialogo vengono regolate automaticamente di conseguenza. Windows Form supporta inoltre il ridimensionamento automatico in base al tipo di carattere di sistema predefinito o alla risoluzione dello schermo. Facoltativamente, il ridimensionamento automatico può essere disabilitato in un'applicazione.
Attenzione
Non sono supportate combinazioni arbitrarie di valori DPI e modalità di ridimensionamento dei tipi di carattere. Anche se è possibile ridimensionare un controllo utente usando una modalità (ad esempio, DPI) e posizionarlo in un modulo usando un'altra modalità (Tipo di carattere) senza problemi, la combinazione di un modulo di base in una modalità e un form derivato in un'altra può causare risultati imprevisti.
Scalabilità automatica in azione
Windows Form usa la logica seguente per ridimensionare automaticamente i moduli e il relativo contenuto:
In fase di progettazione, ogni ContainerControl registra la modalità di ridimensionamento nel AutoScaleMode e la risoluzione corrente nel AutoScaleDimensionsrispettivamente.
In fase di esecuzione, la risoluzione effettiva viene archiviata nella proprietà CurrentAutoScaleDimensions. La proprietà AutoScaleFactor calcola in modo dinamico il rapporto tra la risoluzione della scalabilità in fase di esecuzione e quella in fase di progettazione.
Quando il modulo viene caricato, se i valori di CurrentAutoScaleDimensions e AutoScaleDimensions sono diversi, viene chiamato il metodo PerformAutoScale per ridimensionare il controllo e i suoi elementi figlio. Questo metodo sospende il layout e chiama il metodo Scale per eseguire il ridimensionamento effettivo. Successivamente, il valore di AutoScaleDimensions viene aggiornato per evitare il ridimensionamento progressivo.
PerformAutoScale viene richiamato automaticamente anche nelle situazioni seguenti:
In risposta all'evento OnFontChanged, se la modalità di ridimensionamento è Font.
Quando il layout del controllo contenitore riprende e viene rilevata una modifica nelle proprietà AutoScaleDimensions o AutoScaleMode.
Come indicato in precedenza, quando il genitore ContainerControl viene ridimensionato. Ogni controllo contenitore è responsabile del ridimensionamento degli elementi figlio usando i propri fattori di ridimensionamento e non quelli del contenitore padre.
I controlli subordinati possono modificare il comportamento di ridimensionamento in diversi modi:
È possibile eseguire l'override della proprietà ScaleChildren per determinare se i controlli figlio devono essere ridimensionati o meno.
È possibile eseguire l'override del metodo GetScaledBounds per regolare i limiti su cui viene ridimensionato il controllo, ma non la logica di ridimensionamento.
È possibile eseguire l'override del metodo ScaleControl per modificare la logica di ridimensionamento per il controllo corrente.
Vedere anche
.NET Desktop feedback