web-dev-qa-db-fra.com

Obtenir une résolution d'écran dans l'application Win10 UWP

Lorsqu'une application UWP fonctionne en mode fenêtre sur les systèmes de bureau courants, la "vieille" méthode permettant d'obtenir la résolution de l'écran ne fonctionne plus. 

Ancienne résolution avec Window.Current.Bounds était comme montré dans.

Existe-t-il un autre moyen d'obtenir la résolution de l'écran (principal)? 

25
Alex Witkowski

Pour améliorer encore un peu les autres réponses, le code suivant prend également en compte les facteurs d'échelle, par exemple. pour mon 200% pour mon affichage Windows (renvoie correctement 3200x1800) et 300% du Lumia 930 (1920x1080).

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

Comme indiqué dans les autres réponses, ceci ne renvoie que la taille correcte sur le bureau avant la modification de la taille du cadre racine.

49
sibbl

Appelez cette méthode n'importe où et à tout moment (testé dans l'application mobile/desktop):

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

Bon alors la réponse de Juan Pablo Garcia Coello amène moi à la solution - Merci pour ça! 

Vous pouvez utiliser 

var bounds = ApplicationView.GetForCurrentView().VisibleBounds;

mais vous devez l'appeler avant que les fenêtres ne s'affichent dans mon cas juste après

Window.Current.Activate();

est un bon endroit. À ce stade, vous obtiendrez les limites de la fenêtre dans laquelle votre application apparaîtra. 

Merci beaucoup de m'aider à le résoudre :)

Cordialement Alex 

3
Alex Witkowski

Le moyen le plus simple:

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

Cela ne dépend pas de la taille de la vue actuelle. À tout moment, la résolution d'écran réelle est renvoyée.

3
Vyacheslav

Le seul moyen que j'ai trouvé est à l'intérieur du constructeur d'une page:

 public MainPage()
    {
        this.InitializeComponent();

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

Je n'ai pas testé dans Windows 10 Mobile, lorsque la nouvelle version paraît, je vais tester cela.

2

Utilisez cette méthode pour obtenir la taille de l'écran:

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

Vous devez appeler cette méthode à partir de App.xaml.cs, après Window.Current.Activate (); dans la méthode OnLaunched.

Voici l'exemple de code et vous pouvez télécharger le projet complet.

0
Ann Yu