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

Posted

技术标签:

【中文标题】在 Windows Phone 8.1 XAML 中获取设备屏幕分辨率【英文标题】:Get device screen resolution in Windows Phone 8.1 XAML 【发布时间】:2014-07-31 07:44:58 【问题描述】:

在 Windows Phone 8 中,我可以使用 DeviceExtendedPropertiesApplication.Current.Host.Content.ScaleFactor 获得屏幕分辨率。这些都不适用于 Windows Phone 8.1 XAML。

我找不到如何在 Windows Phone 8.1 XAML 中获取屏幕分辨率的方法,有什么方法吗?

【问题讨论】:

【参考方案1】:

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

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

var scaleFactor = DisplayInformation.GetForCurrentView().RawPixelsPerViewPixel;

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

【讨论】:

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

您可以使用Window 和DisplayInformation 获得有关分辨率的所有信息

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

【讨论】:

bounds 返回一些奇怪的值,正如我在上一个答案的评论中提到的那样。 displayInfo 有一个有趣的缩放因子属性,但 WVGA 为 140,WXGA 为 180,与 WP8 相比似乎不太合适 @IgorKulman 抱歉,我也应该提到如何计算它,而不仅仅是从哪里获得所需的信息。无论如何,我看到 KooKiz 已经做到了。 :)

以上是关于在 Windows Phone 8.1 XAML 中获取设备屏幕分辨率的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows Phone 8.1 XAML 中检测停用和应用关闭

如何在 Windows Phone 8.1 XAML (RT) 应用程序中显示 admob 广告?

如何填充文本框-Windows Phone 8.1

为 Windows Phone 8.1 XAML 应用程序显示的奇怪版本

Windows Phone 8.1 XAML 应用程序。如何防止不适当的自动对焦改变?

适用于 Windows Phone 8.1(无 XAML)的最小应用程序:与桌面应用程序的差异