Get Screen Resolution in Win10 UWP App

2019-01-07 10:23发布

As an UWP App runs in window mode on common desktop systems the "old" way of getting the screen resolution won't work anymore.

Old Resolution with Window.Current.Bounds was like shown in.

Is there another way to get the resolution of the (primary) display?

7条回答
爷、活的狠高调
2楼-- · 2019-01-07 11:02

Call this method anywhere, anytime (tested in mobile/desktop 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;
}
查看更多
相关推荐>>
3楼-- · 2019-01-07 11:05

The more simple way:

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

This does not depends on current view size. At any time it returns real screen resolution.

查看更多
▲ chillily
4楼-- · 2019-01-07 11:07

To improve the other answers even a bit more, the following code also takes care of scaling factors, e.g. for my 200% for my Windows display (correctly returns 3200x1800) and 300% of the Lumia 930 (1920x1080).

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

As stated in the other answers, this only returns the correct size on Desktop before the size of root frame is changed.

查看更多
爱情/是我丢掉的垃圾
5楼-- · 2019-01-07 11:07

Use this method to get the screen size:

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

You should call this method from App.xaml.cs, after Window.Current.Activate(); in OnLaunched method.

Here's the sample code and you can download the full project.

查看更多
ら.Afraid
6楼-- · 2019-01-07 11:13

Okay so the Answer from Juan Pablo Garcia Coello lead me to the Solution - Thanks for that!

You can use

var bounds = ApplicationView.GetForCurrentView().VisibleBounds;

but you must call it before the windows is displayed in my case right after

Window.Current.Activate();

is a good place. At this time you will get the bounds of the window on which your app will appear.

Thanks a lot for help me solving it :)

Regards Alex

查看更多
Rolldiameter
7楼-- · 2019-01-07 11:20

The only way I found is inside the constructor of a Page:

 public MainPage()
    {
        this.InitializeComponent();

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

I have not tested in Windows 10 Mobile, when the new release appears I will test that.

查看更多
登录 后发表回答