如何获得Windows Phone设备的屏幕分辨率(How to get screen resolu

2019-08-17 10:29发布

我遇到的问题,并会在这里欣赏专家的帮助。 我试图让屏幕分辨率,这样我可以使用基于电话的类型适当布局/图像。

我的项目类型为WP7。 每当我跑在不同的WP7和WP8设备代码,我得到了相同的分辨率每次(800 X 480)。 预期的行为是我得到的根据设备类型如WVGA分辨率不同= 800×480,WXGA = 1280×768,支持720p = 1280×720。

下面的所有3个代码片段给我的未预期的行为,800 X 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;

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

Answer 1:

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

我没有我的WP8环境了,但你可以看到类似的解决方案在这里 。 他们用它来创建WP7.8王尔德瓷砖



Answer 2:

我结束了写作按照上述基于代码的安东·西济科夫建议。 它使用反射来读取比例因子财产。 如果7.1应用上WP8设备上运行,反射将用于比例因子属性返回值与基于能够确定设备的分辨率。

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


}


Answer 3:

作为MSDN文章中所述您链接到: MSDN

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

你可能会需要创建一个WP8项目定制为WP8的各项决议。 如果你仍然想支持WP7的设备,那么你需要创建一个单独的WP7项目。



文章来源: How to get screen resolutions on Windows Phone devices