Risolvere i problemi di hdpi/ridimensionamento con progettazione Windows Form in Visual Studio

In questo articolo si apprenderà come risolvere i problemi di rendering dovuti alle limitazioni di ridimensionamento del Windows Form Designer nei monitor HDPI eseguendo Visual Studio come processo non compatibile con DPI. HDPI è l'acronimo di punti alti per pollice, con ogni punto che rappresenta un pixel fisico del dispositivo.

Una maggiore densità di pixel crea immagini più nitide e visualizza correttamente gli elementi delle dimensioni di ridimensionamento. Senza il ridimensionamento corretto, gli elementi e il testo dell'interfaccia utente sono troppo piccoli per usarli in modo efficace e possono sovrapporsi. Per risolvere questo problema, Windows ridimensiona automaticamente il percentile dell'interfaccia utente in modo che corrisponda all'impostazione DPI. Ad esempio, un'impostazione DPI del 100% rappresenta 96 DPI e il 125% è 120 DPI. Monitor usati per la spedizione con 96 pixel per pollice, che Windows usa come linea di base per il disegno bitmap al 100%. Tuttavia, come tecnologia di visualizzazione avanzata, i monitor ora vengono forniti con pannelli di 300 DPI o superiore.

Quando un'applicazione dichiara di essere compatibile con DPI, si tratta di un'istruzione che specifica che l'app si comporta bene con impostazioni DPI più elevate e in modo che Windows possa applicare la scalabilità automatica. Viceversa, le applicazioni con valori DPI non consapevoli eseguono il rendering a un valore DPI fisso di 96 pixel per pollice o 100%, quindi la scalabilità automatica non viene applicata.

Windows Form Designer non è a conoscenza di DPI

Nota

In Visual Studio 2022 versione 17.8 o successiva è possibile evitare i problemi descritti in questo articolo. Visual Studio 2022 versione 17.8 offre il supporto per le schede dpi non consapevoli all'interno di un'applicazione compatibile con DPI. Vedere Miglioramenti dpi di Visual Studio. In questo modo è possibile progettare Windows Form per contesti dpi non consapevoli, senza richiedere l'esecuzione di Visual Studio in modalità DPI non inconsapevoli. Per usare questa impostazione in un progetto Windows Form, impostare la proprietà ForceDesignerDPIUnaware su true nel file di progetto:

<PropertyGroup>
  ...
  <ForceDesignerDPIUnaware>true</ForceDesignerDPIUnaware>
</PropertyGroup>

Per impostazione predefinita, Visual Studio è un'applicazione compatibile con punti per pollice (DPI), il che significa che la visualizzazione viene ridimensionata automaticamente. Tuttavia, Windows Form Designer è un'app dpi-unware, quindi viene visualizzata come bitmap a 96 DPI. Senza il supporto della scalabilità automatica, i problemi e la sovrapposizione si verificano quando si aprono moduli su monitor HDPI, come in questa immagine:

Screenshot of Windows Forms Designer on HDPI monitor that shows issues due to lack of autoscaling support.

Quando si apre un modulo in Windows Form Designer in un monitor HDPI, Visual Studio visualizza una barra delle informazioni che visualizza la percentuale di ridimensionamento corrente del monitoraggio (ad esempio, 150%/144 DPI), un'opzione per riavviare Visual Studio al ridimensionamento al 100% in modo che corrisponda a Windows Form Designer e altre informazioni. Il riavvio del ridimensionamento al 100% rende VS DPI inconsapevole, consentendo il rendering corretto senza sovrapposizioni.

Screenshot of the information bar in Visual Studio to restart in DPI-unaware mode.

Suggerimento

  1. Se la barra delle informazioni è stata chiusa e si vuole riavviare Visual Studio come dpi-unware, usare lo strumento DevEnv.exe.
  2. Se non si lavora nella finestra di progettazione, è possibile ignorare la barra delle informazioni. È anche possibile disabilitare le notifiche in modo che la barra delle informazioni non continui a essere visualizzata.

Riavviare Visual Studio come processo incompatibile con DPI

La soluzione consigliata per risolvere questi problemi dell'interfaccia utente consiste nel riavviare Visual Studio come processo inconsapevole di DPI, il che significa che viene riavviato al 100% del ridimensionamento (96 DPI).

Per passare a DPI-unware:

  • Selezionare l'opzione "Restart Visual Studio with 100% scaling" (Riavvia Visual Studio con ridimensionamento al 100%) sulla barra delle informazioni gialla visualizzata quando si apre un modulo in Windows Form Designer.

È importante riavviare Visual Studio per ripristinarne l'impostazione predefinita come processo compatibile con DPI al termine del lavoro in Progettazione Windows Form.

Per tornare al riconoscimento DPI:

  • Chiudere e riaprire Visual Studio per tornare al riconoscimento DPI. In alternativa, selezionare l'opzione Riavvia Visual Studio come processo compatibile con DPI nella barra delle informazioni.

Quando Visual Studio viene eseguito come dpi-unware, i problemi di layout della finestra di progettazione vengono risolti, tuttavia i tipi di carattere potrebbero apparire sfocati e i problemi possono essere visualizzati in altre finestre di progettazione, ad esempio la finestra di progettazione XAML. Visual Studio visualizza un messaggio informativo diverso quando DPI non è a conoscenza che indica che Visual Studio è in esecuzione come processo dpi-unware. Le finestre di progettazione WPF e XAML potrebbero non essere visualizzate correttamente."

Nota

  • Se sono presenti finestre degli strumenti non ancorate dopo aver selezionato l'opzione per riavviare Visual Studio come processo non compatibile con DPI, la posizione delle finestre degli strumenti potrebbe cambiare.
  • Se si usa il profilo di Visual Basic predefinito o se è stata deselezionata l'opzione Salva nuovi progetti alla creazione in Strumenti>Opzioni>Progetti e soluzioni, Visual Studio non è in grado di riaprire il progetto quando viene riavviato come processo incompatibile con DPI. Tuttavia, è possibile aprire il progetto selezionandolo in File>Progetti e soluzioni recenti.

Nota

  • Se dopo aver selezionato l'opzione per riavviare Visual Studio come processo non compatibile con DPI, la posizione delle finestre degli strumenti potrebbe cambiare.
  • Il profilo Visual Basic predefinito non riaprirà i progetti quando Visual Studio viene riavviato come processo non compatibile con DPI. È invece possibile accedere al progetto tramite Progetti e soluzioni recenti file>.

Usa Windows per impostare il ridimensionamento dello schermo su 100%

Per evitare di usare Visual Studio per attivare o disattivare il ridimensionamento della visualizzazione, regolare il ridimensionamento nelle impostazioni di Windows. Ad esempio, in Windows 11, puoi impostare il ridimensionamento su 100% (96 DPI).

A tale scopo, digitare impostazioni di visualizzazione nella casella di ricerca della barra delle applicazioni e quindi selezionare Modifica impostazioni di visualizzazione. Nella finestra Impostazioni impostare Modifica la dimensione di testo, app e altri elementi su 100%. Tenere presente che il ridimensionamento del 100% (96 DPI) può rendere l'interfaccia utente troppo piccola per un uso pratico.

Disabilitare il ridimensionamento usando lo strumento da riga di comando DevEnv

Per gestire le impostazioni di visualizzazione usando gli strumenti da riga di comando anziché gli strumenti dell'interfaccia utente (interfaccia utente), usare DevEnv.exe. Il devenv.exe comando accetta /noscale come parametro della riga di comando per l'esecuzione in modalità di ridimensionamento del 100%. Ecco come usarla:

  1. Selezionare Strumenti prompt dei comandi per gli sviluppatori dalla riga di comando>della barra dei menu di Visual Studio.>
  2. Quindi, immetti devenv /noScale.

Altre opzioni

Oltre alle opzioni sopra indicate, è anche possibile provare le opzioni seguenti:

Risoluzione dei problemi

Se la transizione di riconoscimento DPI non funziona in Visual Studio, verificare che il dpiAwareness valore non sia presente nella sottochiave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\devenv.exe nell'editor del Registro di sistema. Eliminare il valore se presente.