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
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.
- 1. Un'applicazione WPF ignora le impostazioni DPI
- 2. C# WinForms disabilita il ridimensionamento DPI
- 3. Winforms C#: come modificare DPI di System.Drawing.BItmap?
- 4. Perché le impostazioni della mia applicazione non vengono mantenute persistenti?
- 5. Quando si utilizza la finestra di progettazione di WinForms, devo sempre impostare DPI su 96?
- 6. Posso impostare la risoluzione DPI della mia applicazione Java Swing senza modificare le impostazioni DPI del sistema?
- 7. Perché alcuni tipi di carattere di Google vengono visualizzati in modo errato in stile corsivo
- 8. Come ridimensionate le immagini in Groovy?
- 9. come cambiare le impostazioni utente .NET posizione
- 10. Aggiunta di impostazioni a Impostazioni
- 11. Finestra di controllo Visual Studio 2013 C++: le matrici vengono copiate in modo errato negli appunti
- 12. WindowLicker per .NET WinForms?
- 13. Perché WPF non supporta C++ .NET - il modo in cui funziona WinForms?
- 14. Localizzazione .NET WinForms - sostituzione ComponentResourceManager
- 15. Perché le applicazioni WinForms STAThread sono predefinite?
- 16. Le immagini appartenenti alle importazioni di FeedWordpress vengono ridimensionate, ma dove?
- 17. Quando vengono effettivamente lette le impostazioni da app.config?
- 18. Crittografia delle password in WinForms app.config, .NET
- 19. In .NET, perché le costanti vengono valutate in fase di compilazione anziché in fase di JIT?
- 20. problemi DPI elevati
- 21. Regola le colonne ListView per adattarle a WinForms
- 22. Dichiarazioni switch di grandi dimensioni: OOP errato?
- 23. Come ottenere l'applicazione Java swing per rispettare le impostazioni DPI OS
- 24. I timer .NET vengono eseguiti in modo asincrono?
- 25. Perché Python valuta questa espressione in modo errato?
- 26. Come vengono implementate le espressioni regolari in .NET?
- 27. Perché node.js gestisce setTimeout (func, 1.0) in modo errato?
- 28. Perché le variabili $ _POST vengono scappate in PHP?
- 29. impostazioni delle applicazioni .Net percorso
- 30. Sto evitando le stringhe in modo errato in JavaScript?