Targeting dell'applicazione per .Net Framework 4.7 ed esecuzione su Windows 10 v1703 (Creators Update Build 15063). Con .Net 4.7 in Windows 10 (v1703), MS ha apportato molti miglioramenti DPI .
A partire da .NET Framework 4.7, Windows Form include miglioramenti per scenari DPI elevati e DPI dinamici comuni. Questi includono:
Miglioramenti nel ridimensionamento e nel layout di numerosi controlli di Windows Form, come il controllo MonthCalendar e il controllo CheckedListBox.
Ridimensionamento a passaggio singolo. In .NET Framework 4.6 e versioni precedenti, il ridimensionamento veniva eseguito attraverso più passaggi, il che causava il ridimensionamento di alcuni controlli più del necessario.
Supporto per scenari DPI dinamici in cui l'utente modifica il DPI o il fattore di scala dopo l'avvio di un'applicazione Windows Form.
Per supportarlo, aggiungi un manifest dell'applicazione alla tua applicazione e segnala che l'app supporta Windows 10:
<compatibility xmlns="urn:schemas-microsoft.comn:compatibility.v1">
<application>
<!-- Windows 10 compatibility -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
</application>
</compatibility>
Quindi, aggiungere un app.config
e dichiarare l'app per monitor consapevole. Questo è ORA fatto in app.config e NON nel manifest come prima!
<System.Windows.Forms.ApplicationConfigurationSection>
<add key="DpiAwareness" value="PerMonitorV2" />
</System.Windows.Forms.ApplicationConfigurationSection>
Questo PerMonitorV2 è nuovo dall'aggiornamento dei creatori di Windows 10:
DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2
Conosciuto anche come Per Monitor v2. Un avanzamento rispetto alla modalità di consapevolezza DPI per monitor originale, che consente alle applicazioni di accedere a nuovi comportamenti di ridimensionamento relativi a DPI su una finestra di livello superiore.
Notifiche di modifica DPI finestra figlio - Nei contesti Per Monitor v2, l'intero albero della finestra viene informato di eventuali modifiche DPI che si verificano.
Ridimensionamento dell'area non client - Tutte le finestre avranno automaticamente l'area non client disegnata in modo DPI sensibile. Le chiamate a EnableNonClientDpiScaling non sono necessarie.
S caling dei menu Win32 - menu Tutte NTUSER create in contesti per monitor v2 sarà di scala in modo per-monitor.
Dialog Scaling - Le finestre di dialogo Win32 create in contesti Per Monitor v2 risponderanno automaticamente alle modifiche DPI.
Ridimensionamento migliorato dei controlli comctl32 - Vari controlli comctl32 hanno migliorato il comportamento del ridimensionamento DPI nei contesti Per Monitor v2.
Miglioramento del comportamento dei temi : gli handle UxTheme aperti nel contesto di una finestra Per Monitor v2 funzioneranno in termini di DPI associato a quella finestra.
Ora puoi iscriverti a 3 nuovi eventi per ricevere notifiche sulle modifiche DPI:
Control.DpiChangedAfterParent , che viene attivato Si verifica quando l'impostazione DPI per un controllo viene modificata a livello di codice dopo che si è verificato un evento di modifica DPI per il relativo controllo o modulo padre.
Control.DpiChangedBeforeParent , che viene generato quando l'impostazione DPI per un controllo viene modificata a livello di codice prima che si verifichi un evento di modifica DPI per il relativo controllo o modulo.
Form.DpiChanged , che viene attivato quando l'impostazione DPI cambia sul dispositivo di visualizzazione in cui il modulo è attualmente visualizzato.
Hai anche 3 metodi di supporto per la gestione / ridimensionamento DPI:
Control.LogicalToDeviceUnits , che converte un valore da pixel logici a pixel del dispositivo.
Control.ScaleBitmapLogicalToDevice , che ridimensiona un'immagine bitmap al DPI logico per un dispositivo.
Control.DeviceDpi , che restituisce il DPI per il dispositivo corrente.
Se i problemi persistono, puoi disattivare i miglioramenti DPI tramite le voci app.config .
Se non hai accesso al codice sorgente, puoi andare alle proprietà dell'applicazione in Esplora risorse, andare alla compatibilità e selezionare System (Enhanced)
che attiva il ridimensionamento GDI per migliorare anche la gestione DPI:
Per le applicazioni basate su GDI, Windows può ora ridimensionare DPI in base al monitor. Ciò significa che queste applicazioni diventeranno magicamente consapevoli del DPI per monitor.
Fai tutti questi passaggi e dovresti ottenere una migliore esperienza DPI per le applicazioni WinForms. Ma ricorda, devi scegliere come target la tua app per .net 4.7 e hai bisogno almeno di Windows 10 Build 15063 (Creators Update). Nel prossimo aggiornamento di Windows 10 1709, potremmo ottenere ulteriori miglioramenti.
NumericUpDown
non si ridimensionaMargin
correttamente, anche. Sembra che il margine sia ridimensionato due volte. Se lo ridimensiono una volta, sembra buono.