Problema di risoluzione dello schermo in WPF?

Rileverò la risoluzione con il seguente codice in WPF:

double height = System.Windows.SystemParameters.PrimaryScreenHeight; double width = System.Windows.SystemParameters.PrimaryScreenWidth; 

La risoluzione attuale del mio schermo è 1920 * 1200, ma l’ height è 960.0 e la width è 1536,0 !!!

Che cosa c’è che non va ?
Grazie in anticipo.

Tieni presente che tutte le posizioni e le dimensioni WPF sono in virgola mobile con un’unità di 1/96 di pollice. Non pixel. Ciò rende la risoluzione dei disegni delle windows indipendente. Fare i calcoli: altezza = 960/96 = 10 pollici. Con la scheda video impostata su 120 DPI (120/96 = 125%): 10 * 120 = 1200 pixel. Stessa larghezza: 1536/96 * 120 = 1920 pixel.

System.Windows.Forms funziona in unità di pixel. Stai ottenendo meno di 1050 per l’altezza perché sottrae l’altezza della barra delle applicazioni. Ma per WPF vuoi sempre lavorare con 1/96 “, mai pixel.

Per un’implementazione ancora più robusta, è necessario calcolare i fattori DPI sul proprio sistema e lavorare con tali fattori. Un valore DPI normale è 96, ma alcuni monitor potrebbero avere valori diversi. Considera che il tuo codice potrebbe essere in esecuzione su un monitor con un valore DPI diverso da 96. Considera questo codice:

  private static void CalculateDpiFactors() { Window MainWindow = Application.Current.MainWindow; PresentationSource MainWindowPresentationSource = PresentationSource.FromVisual(MainWindow); Matrix m = MainWindowPresentationSource.CompositionTarget.TransformToDevice; thisDpiWidthFactor = m.M11; thisDpiHeightFactor = m.M22; } 

È quindi ansible utilizzare tali rapporti per ottenere i valori finali:

 CalculateDpiFactors(); double ScreenHeight = SystemParameters.PrimaryScreenHeight * thisDpiHeightFactor; double ScreenWidth = SystemParameters.PrimaryScreenWidth * thisDpiWidthFactor; 

I valori di ScreenHeight e ScreenWidth devono corrispondere a quelli visualizzati nella finestra delle proprietà del monitor.

Prova SystemParameters.FullPrimaryScreenWidth e FullPrimaryScreenHeight, credo che PrimaryScreenWidth e Height restituiscano le dimensioni della finestra client disponibile dopo aver rimosso la barra delle applicazioni e altre deskbands sullo schermo.

Se si seleziona “Usa ridimensionamento DPI in stile Windows XP”, il valore restituito di “Screen.PrimaryScreen.Bounds” è corretto. In caso contrario, il valore restituito viene proporzionalmente ridotto dal valore DPI (che è l’impostazione predefinita).

Per trovare la casella di controllo “Usa ridimensionamento DPI in stile Windows XP”, espandere il collegamento “Per rendere più chiari il testo e gli elementi sullo schermo in programmi non progettati per DPI” nel seguente collegamento: http://windows.microsoft. com / it-it / windows-vista / Make-the-text-on-your-schermo-più-o-più piccoli

Si prega di chiamare questo dopo aver caricato le windows.

  public static class Ext { public static Size GetNativePrimaryScreenSize(this Window window) { PresentationSource mainWindowPresentationSource = PresentationSource.FromVisual(window); Matrix m = mainWindowPresentationSource.CompositionTarget.TransformToDevice; var dpiWidthFactor = m.M11; var dpiHeightFactor = m.M22; double screenHeight = SystemParameters.PrimaryScreenHeight * dpiHeightFactor; double screenWidth = SystemParameters.PrimaryScreenWidth * dpiWidthFactor; return new Size(screenWidth, screenHeight); } } 

prova questi .. credo che questo potrebbe correggere l’errore …..

System.Windows.Form1.Screen.PrimaryScreen.Bounds.Height; System.Windows.Form1.Screen.PrimaryScreen.Bounds.Widtht;