在Windows Phone 8.1 XAML中如何获取设备屏幕分辨率

20
在Windows Phone 8中,我可以使用DeviceExtendedPropertiesApplication.Current.Host.Content.ScaleFactor来获取屏幕分辨率。但在Windows Phone 8.1 XAML中,这些都不起作用。
我找不到在Windows Phone 8.1 XAML中获取屏幕分辨率的方法,是否有方法?
2个回答

31

使用WinRT API时,您可以使用Windows.UI.Xaml.Window.Current.Bounds(高度和宽度)获取屏幕分辨率。

您需要将这些值乘以比例因子以获得实际分辨率。您可以通过调用DisplayInformation.GetForCurrentView().RawPixelsPerViewPixel来检索比例因子。

var scaleFactor = DisplayInformation.GetForCurrentView().RawPixelsPerViewPixel;

Debug.WriteLine("The current resolution is {0}x{1}", Window.Current.Bounds.Width * scaleFactor, Window.Current.Bounds.Height * scaleFactor);

5.5英寸和6英寸的模拟器宽度都是1080p,但当我运行我的应用程序时,5.5英寸设备呈现出不同的效果。在真实设备上也是这样吗? - garenyondem
@garenyondem 很可能是因为它们具有不同的 RawPixelsPerViewPixel 因子,该因子定义了以视图像素(在混合中称为“有效设备分辨率”)测量的“软分辨率”。根据 RawPixelsPerViewPixel 的值,在您的情况下可能是 220 或 240,您将获得不同的“软分辨率”:490x872 或 450x800,因此,如果您已将元素定位到右侧边缘 50 像素,则它将出现在不同的位置相对于中心在不同的模拟器中,尽管分辨率相同。 - Dimitry K
此外,似乎在WP8.1中,“比例因子”概念已经发生了变化,并被“替换”(有点)为“RawPixelsPerViewPixel”概念...这是有道理的,除非出现以下奇怪的事实:对于相同的屏幕分辨率,这个“RPPVP”有时会像我上面描述的那样不同。 - Dimitry K
获取实际分辨率真是太棒了。谢谢! 请问您能提供一些代码来获取屏幕尺寸,例如4英寸、4.5英寸、5英寸或6英寸……如何获取这个值。谢谢。 - Zia Ur Rahman

10

您可以使用WindowDisplayInformation获取有关分辨率的所有所需信息。

var bounds = Window.Current.Bounds;
var displayInfo = DisplayInformation.GetForCurrentView();

边界返回一些奇怪的值,正如我在之前的答案评论中提到的。displayInfo具有一个有趣的缩放因子属性,但对于WVGA是140,对于WXGA是180,与WP8不相符。 - Igor Kulman
1
@IgorKulman 抱歉,我应该同时提及如何计算它,而不仅仅是获取所需的信息。无论如何,我看到KooKiz已经完成了这个任务。 :) - yasen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接