Obtenga resolución de pantalla en la aplicación Win10 UWP

Como una aplicación UWP se ejecuta en modo ventana en sistemas de escritorio comunes, la “vieja” forma de obtener la resolución de la pantalla ya no funcionará.

Old Resolution with Window.Current.Bounds era como se muestra en.

¿Hay alguna otra forma de obtener la resolución de la pantalla (principal)?

Para mejorar las otras respuestas, incluso un poco más, el siguiente código también se ocupa de los factores de escala, por ejemplo, para mi 200% para mi pantalla de Windows (devuelve 3200×1800 correctamente) y 300% del Lumia 930 (1920×1080).

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

Como se indica en las otras respuestas, esto solo devuelve el tamaño correcto en el escritorio antes de que se modifique el tamaño del marco raíz.

Llame a este método en cualquier lugar, en cualquier momento (probado en la aplicación móvil / de escritorio):

 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; } 

De acuerdo, la respuesta de Juan Pablo García Coello me llevó a la solución. ¡Gracias por eso!

Puedes usar

 var bounds = ApplicationView.GetForCurrentView().VisibleBounds; 

pero debe llamarlo antes de que se muestre la ventana en mi caso justo después

 Window.Current.Activate(); 

es un buen lugar En este momento, obtendrá los límites de la ventana en la que aparecerá su aplicación.

Muchas gracias por ayudarme a resolverlo 🙂

Saludos Alex

La única forma que encontré es dentro del constructor de una página:

  public MainPage() { this.InitializeComponent(); var test = ApplicationView.GetForCurrentView().VisibleBounds; } 

No probé en Windows 10 Mobile, cuando aparezca la nueva versión lo probaré.

La forma más simple:

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

Esto no depende del tamaño de la vista actual. En cualquier momento, devuelve una resolución de pantalla real.

Use este método para obtener el tamaño de la pantalla:

 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; } 

Debe llamar a este método desde App.xaml.cs, después de Window.Current.Activate (); en el método OnLaunched.

Aquí está el código de muestra y puede descargar el proyecto completo.

Simplemente establezca un nombre para la Cuadrícula o Página principal y llame su ancho o alto para un elemento que desee:

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

¡Es la forma más fácil de usar!