31

由于 UWP 应用程序在常见桌面系统上以窗口模式运行,因此获取屏幕分辨率的“旧”方式将不再适用。

旧决议与Window.Current.Bounds所示

有没有另一种方法来获得(主)显示器的分辨率?

4

7 回答 7

58

为了进一步改进其他答案,以下代码还考虑了缩放因子,例如我的 Windows 显示器的 200%(正确返回 3200x1800)和 Lumia 930 (1920x1080) 的 300%。

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

如其他答案所述,这仅在更改根框架的大小之前在桌面上返回正确的大小。

于 2015-08-11T08:46:06.140 回答
12

随时随地调用此方法(在移动/桌面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;
}
于 2017-01-01T20:30:26.180 回答
8

更简单的方法:

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

这不取决于当前视图大小。它随时返回真实的屏幕分辨率。

于 2017-02-27T08:18:56.690 回答
5

好的,所以Juan Pablo Garcia Coello的回答引导我找到解决方案 - 谢谢!

您可以使用

var bounds = ApplicationView.GetForCurrentView().VisibleBounds;

但是您必须在我的情况下立即显示窗口之前调用它

Window.Current.Activate();

是个好地方。此时,您将获得您的应用程序将出现的窗口的边界。

非常感谢帮助我解决它:)

问候亚历克斯

于 2015-08-11T08:42:00.160 回答
2

我发现的唯一方法是在 Page 的构造函数中:

 public MainPage()
    {
        this.InitializeComponent();

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

我尚未在 Windows 10 Mobile 中进行测试,当新版本出现时,我将对其进行测试。

于 2015-08-11T08:27:30.243 回答
1

使用此方法获取屏幕尺寸:

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

您应该在 Window.Current.Activate(); 之后从 App.xaml.cs 调用此方法;在 OnLaunched 方法中。

这是示例代码,您可以下载完整的项目。

于 2016-08-16T03:03:34.397 回答
-3

只需为主 Grid 或 Page 设置名称,然后为您想要的元素调用其宽度或高度:

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

这是您可以使用的最简单的方法!

于 2015-11-16T23:00:42.370 回答