2015-08-11 16 views
22

Poiché un'applicazione UWP viene eseguita in modalità finestra su sistemi desktop comuni, il "vecchio" modo di ottenere la risoluzione dello schermo non funzionerà più.Risoluzione dello schermo nell'app UWP Win10

Vecchio Risoluzione con Window.Current.Bounds era come shown in.

C'è un altro modo per ottenere la risoluzione del display (primario)?

+0

Ti dispiacerebbe spiegare cosa significa che non funziona? – Barptad

+1

@Barptad Window.Current.Bounds restituisce le dimensioni della finestra corrente, non le dimensioni dello schermo. –

+2

Curioso da chiedere. Perché hai bisogno di conoscere la risoluzione? –

risposta

47

Per migliorare le altre risposte anche un po 'di più, il seguente codice si occupa anche di fattori di scala, per esempio per il mio 200% per il mio schermo Windows (restituisce correttamente 3200x1800) e il 300% del Lumia 930 (1920x1080).

var bounds = ApplicationView.GetForCurrentView().VisibleBounds; 
var scaleFactor = DisplayInformation.GetForCurrentView().RawPixelsPerViewPixel; 
var size = new Size(bounds.Width*scaleFactor, bounds.Height*scaleFactor); 

Come indicato nelle altre risposte, questo restituisce solo la dimensione corretta sul desktop prima che la dimensione del telaio principale è cambiato.

+0

Dopo rootFrame.SizeChanged var limits = ApplicationView.GetForCurrentView(). VisibleBounds; non mi dà la giusta risoluzione. La mia scala sul desktop è 100, quindi non ha effetto. –

+0

Ho aggiornato la mia risposta un po '. Il motivo è che i codici delle altre risposte non si occupano dei ridimensionamenti (200% sul mio dispositivo Windows e 300% per il Lumia 930) e sono errati sui miei dispositivi. – sibbl

+1

Ok, questo è giusto. È possibile modificarlo ancora una volta e ricordare che funziona solo prima che venga modificata la dimensione della cornice radice. la tua risposta sarà la soluzione completa;) –

2

L'unico modo che ho trovato è all'interno del costruttore di una pagina:

public MainPage() 
    { 
     this.InitializeComponent(); 

     var test = ApplicationView.GetForCurrentView().VisibleBounds; 
    } 

non ho ancora testato in Windows 10 Mobile, quando la nuova release appare mi metterà alla prova questo.

+0

Sembra non funzionare. Ottengo 838 larghezza e 900 altezza sul mio schermo full HD. –

3

Ok, quindi la risposta da Juan Pablo Garcia Coello mi porta alla soluzione - Grazie per quello!

È possibile utilizzare

var bounds = ApplicationView.GetForCurrentView().VisibleBounds; 

ma è necessario chiamare prima le finestre vengono visualizzate nel mio caso subito dopo

Window.Current.Activate(); 

è un buon posto. In questo momento otterrai i limiti della finestra in cui verrà visualizzata la tua app.

Grazie mille per l'aiuto me risolverlo :)

saluti Alex

-2

Basta impostare un nome per griglia principale o pagina e chiamare la sua larghezza o l'altezza per un elemento che si desidera:

Element.Height = PagePane.Height; 
Element.width = PagePane.Width; 

E 'il modo più semplice è possibile utilizzare!

+3

La domanda era come ottenere la risoluzione dello schermo. Le app UWP possono essere eseguite in modalità Windows sul desktop di Windows 10. quindi la dimensione di Windows non è esattamente ciò di cui avevo bisogno qui. –

0

Utilizzare questo metodo per ottenere la dimensione dello schermo:

public static Size GetScreenResolutionInfo() 
{ 
    var applicationView = ApplicationView.GetForCurrentView(); 
    var displayInformation = DisplayInformation.GetForCurrentView(); 
    var bounds = applicationView.VisibleBounds; 
    var scale = displayInformation.RawPixelsPerViewPixel; 
    var size = new Size(bounds.Width * scale, bounds.Height * scale); 
    return size; 
} 

Si dovrebbe chiamare questo metodo da App.xaml.cs, dopo Window.Current.Activate(); nel metodo OnLaunched.

Ecco il codice di esempio ed è possibile download il progetto completo.

9

chiamare questo metodo, sempre e ovunque (testato in mobile/desktop di App):

public static Size GetCurrentDisplaySize() { 
    var displayInformation = DisplayInformation.GetForCurrentView(); 
    TypeInfo t = typeof(DisplayInformation).GetTypeInfo(); 
    var props = t.DeclaredProperties.Where(x => x.Name.StartsWith("Screen") && x.Name.EndsWith("InRawPixels")).ToArray(); 
    var w = props.Where(x => x.Name.Contains("Width")).First().GetValue(displayInformation); 
    var h = props.Where(x => x.Name.Contains("Height")).First().GetValue(displayInformation); 
    var size = new Size(System.Convert.ToDouble(w), System.Convert.ToDouble(h)); 
    switch (displayInformation.CurrentOrientation) { 
    case DisplayOrientations.Landscape: 
    case DisplayOrientations.LandscapeFlipped: 
     size = new Size(Math.Max(size.Width, size.Height), Math.Min(size.Width, size.Height)); 
     break; 
    case DisplayOrientations.Portrait: 
    case DisplayOrientations.PortraitFlipped: 
     size = new Size(Math.Min(size.Width, size.Height), Math.Max(size.Width, size.Height)); 
     break; 
    } 
    return size; 
} 
+0

FYI, non dovunque in qualsiasi momento: Windows.Graphics.Display: GetForCurrentView deve essere chiamato su un thread associato a un CoreWindow. –

+0

Genio. Questa dovrebbe essere la risposta accettata in quanto quella attuale non gestisce l'app utilizzata nei monitor esterni. –

1

Il modo più semplice:

var displayInformation = DisplayInformation.GetForCurrentView(); 
var screenSize = new Size(displayInformation.ScreenWidthInRawPixels, 
          displayInformation.ScreenHeightInRawPixels); 

Ciò non dipende dalla dimensione della visualizzazione corrente. In qualsiasi momento restituisce la risoluzione reale dello schermo.

Problemi correlati