2010-03-15 18 views
7

La mia applicazione .NET (VB.NET 3.5 se proprio si deve sapere) i moduli non vengono formattati correttamente quando sottoposti a rendering con impostazioni DPI elevate. Tutte le correzioni che ho trovato fino ad ora spiegano semplicemente la causa del problema poiché "alcuni elementi dell'interfaccia utente non si adattano correttamente". Mi stavo chiedendo se qualcuno avesse una spiegazione più significativa? Grazie!Perché le Winforms .NET vengono ridimensionate in modo errato a grandi impostazioni DPI?

risposta

10

Fondamentalmente il problema è che GDI + (e per estensione, Windows Form) utilizza i pixel del dispositivo come unità di misura predefinita. Quando si modifica l'impostazione DPI, le dimensioni fisiche di un pixel non cambiano effettivamente (un pixel è un pixel), ma i caratteri e le immagini misurati in dimensioni non di pixel vengono ridimensionati di conseguenza. Windows Form cerca di adattarlo al meglio, rendendo più spazio per il layout, ma l'unica vera soluzione è utilizzare un sistema di misurazione non basato su pixel. Questo è ciò che fa WPF.

In WPF, a 96 DPI, un pixel indipendente dalla periferica corrisponde alla stessa dimensione di un pixel fisico. Ma quando si modifica il DPI del sistema, WPF ridimensiona il sistema di coordinate virtuali a livello globale. L'applicazione, i controlli, ecc. Non hanno idea di non essere più allineati ai pixel fisici. In effetti questo a volte può causare problemi di aliasing in WPF, ma praticamente non devi mai preoccuparti che il layout dell'applicazione sia diverso in una diversa impostazione DPI.

Una cosa che puoi fare per minimizzare il problema in Windows Form è usare i pannelli di layout "nuovi" (come di .NET 2.0) come TableLayoutPanel, FlowLayoutPanel, ecc. Usa ancoraggio, dock e AutoSize quando possibile. Ciò consentirà a Windows Form di riprodurre l'interfaccia utente nel miglior modo possibile.

Inoltre, fare attenzione che se si creano moduli con un DPI non standard, Windows Form utilizzerà questa come dimensione "base". Fa quasi sempre rovinare tutto. Quindi prova a usare 96 DPI per progettare i tuoi moduli.

Problemi correlati