wake-up-neo.net

Holen Sie sich die Bildschirmauflösung in der Win10 UWP App

Da eine UWP-App im Fenstermodus auf gängigen Desktopsystemen ausgeführt wird, funktioniert die "alte" Methode, die Bildschirmauflösung zu erhalten, nicht mehr. 

Alte Auflösung mit Window.Current.Bounds wurde wie angezeigt.

Gibt es eine andere Möglichkeit, die Auflösung der (primären) Anzeige zu erhalten? 

25
Alex Witkowski

Um die anderen Antworten noch ein wenig zu verbessern, berücksichtigt der folgende Code auch Skalierungsfaktoren, z. für meine 200% für meine Windows-Anzeige (gibt 3200 x 1800 richtig zurück) und 300% der Lumia 930 (1920 x 1080).

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

Wie in den anderen Antworten angegeben, gibt dies nur die richtige Größe auf dem Desktop zurück, bevor die Größe des Stammrahmens geändert wird.

49
sibbl

Rufen Sie diese Methode jederzeit und überall (getestet in der mobilen/Desktop-App) auf:

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

Okay, also die Antwort von Juan Pablo Garcia Coello führe mich zur Lösung - Danke dafür! 

Sie können verwenden 

var bounds = ApplicationView.GetForCurrentView().VisibleBounds;

sie müssen es aber vorher aufrufen, bevor das Fenster in meinem Fall angezeigt wird

Window.Current.Activate();

ist ein guter Ort. Zu diesem Zeitpunkt erhalten Sie die Grenzen des Fensters, in dem Ihre App angezeigt wird. 

Vielen Dank, dass Sie mir beim Lösen geholfen haben :)

Grüße Alex 

3
Alex Witkowski

Der einfachere Weg:

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

Dies hängt nicht von der aktuellen Ansichtsgröße ab. Zu jeder Zeit wird eine echte Bildschirmauflösung angezeigt.

3
Vyacheslav

Die einzige Möglichkeit, die ich gefunden habe, ist im Konstruktor einer Seite:

 public MainPage()
    {
        this.InitializeComponent();

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

Ich habe noch nicht in Windows 10 Mobile getestet. Wenn die neue Version erscheint, werde ich das testen.

Verwenden Sie diese Methode, um die Bildschirmgröße abzurufen:

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

Sie sollten diese Methode von App.xaml.cs aus aufrufen, nachdem Window.Current.Activate (); in der OnLaunched-Methode.

Hier ist der Beispielcode und Sie können das gesamte Projekt herunterladen .

0
Ann Yu