如何在Windows Phone设备上获取屏幕分辨率

问题描述:

我遇到问题,并希望得到专家的帮助。我正在尝试获取屏幕分辨率,以便我可以根据手机类型使用适当的布局/图像。如何在Windows Phone设备上获取屏幕分辨率

我的项目类型是WP7。每当我在不同的WP7和WP8设备上运行代码时,我每次都得到相同的分辨率(800 X 480)。预期的行为是根据设备类型获得不同的分辨率,例如WVGA = 800 x 480,WXGA = 1280 x 768,720p = 1280 x 720.

下面的所有3个代码片段给了我相同的800×480分辨率,这不是预期的行为。

Application.Current.RootVisual.RenderSize.Height + " x " + Application.Current.RootVisual.RenderSize.Width; 

(App.Current.RootVisual as FrameworkElement).ActualHeight + " x " + (App.Current.RootVisual as FrameworkElement).ActualWidth; 

App.Current.Host.Content.ActualHeight + " x " + App.Current.Host.Content.ActualWidth; 

有关如何做到这一点的WP8但请注意,我想代码以及WP7设备上运行的MSDN文章会谈。

您可以尝试使用反射加载App.Current.Host.Content.ScaleFactor

我现在没有我的wp8环境,但是您可以看到类似的解决方案here。他们用它在wp7.8上创建wilde瓷砖

+0

感谢Anton为您提供宝贵意见。这个接近为我工作。 – 2013-03-11 22:23:18

由于MSDN文章中所述您链接到:MSDN

的Windows Phone 7仅支持单个分辨率,800 x 480的因为你的项目的目标是WP7,这将是预期的行为。如果您正在开发Windows Phone 8项目,那么您应该会看到App.Current.Host.Content.ScaleFactor应该返回不同的结果。

您可能需要创建一个WP8项目来自定义WP8中的各种分辨率。如果你仍然想支持WP7设备,那么你将需要创建一个单独的WP7项目。

+0

感谢您的输入。但是,我想避免创建多个项目。我希望使用单个Windows Phone 7(WP7)项目,并创建一个在WP7和WP8设备上运行的应用程序。我的观察是WP7项目,无论运行什么硬件,它总是会返回800x480的分辨率。 WP7 SDK中是否有其他API可以让我读取屏幕分辨率? – 2013-03-09 01:37:37

+0

基本上没有,因为在WP8上运行WP7应用程序时,应用程序总是被限制为800x480。 – 2013-03-09 08:15:51

我最终编写了以下基于代码的Anton Sizikov上面的建议。它使用反射来读取ScaleFactor属性。如果7.1应用程序在WP8设备上运行,则反射将返回ScaleFactor属性的值,并基于该设备的分辨率进行确定。

public enum Resolutions { WVGA, WXGA, HD720p }; 

public static class ResolutionHelper 
{ 
    static int? ScaleFactor; 

    static ResolutionHelper() 
    { 
     object scaleFactorValue = GetPropertyValue(App.Current.Host.Content, "ScaleFactor"); 
     if (scaleFactorValue != null) 
     { 
      ScaleFactor = Convert.ToInt32(scaleFactorValue); 
     } 
    } 

    private static bool IsWvga 
    { 
     get 
     { 
      return ScaleFactor.HasValue && ScaleFactor.Value == 100; 
     } 
    } 

    private static bool IsWxga 
    { 
     get 
     { 
      return ScaleFactor.HasValue && ScaleFactor.Value == 160; 
     } 
    } 

    private static bool Is720p 
    { 
     get 
     { 
      return ScaleFactor.HasValue && ScaleFactor.Value == 150; 
     } 
    } 

    public static Resolutions CurrentResolution 
    { 
     get 
     { 
      if (IsWxga) return Resolutions.WXGA; 
      else if (Is720p) return Resolutions.HD720p; 
      return Resolutions.WVGA; 
     } 
    } 

    private static object GetPropertyValue(object instance, string name) 
    { 
     try 
     { 
      return instance.GetType().GetProperty(name).GetValue(instance, null); 
     } 
     catch 
     { 
      // Exception will occur when app is running on WP7 devices as "ScaleFactor" property doesn't exist. Return null in that case. 
      return null; 
     } 
    } 


}