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

Windows phone 7 如何在Windows Phone设备上获取屏幕分辨率,windows-phone-7,windows-phone,Windows Phone 7,Windows Phone,我遇到了这个问题,非常感谢专家的帮助。我正在尝试获得屏幕分辨率,以便根据手机类型使用适当的布局/图像 我的项目类型是WP7。每当我在不同的WP7和WP8设备上运行代码时,每次都会得到相同的分辨率(800 X 480)。预期行为是根据设备类型获得不同的分辨率,例如WVGA=800 x 480、WXGA=1280 x 768、720p=1280 x 720 下面所有3段代码都给出了800 X 480的相同分辨率,这是不期望的行为 Application.Current.RootVisual.Rend

我遇到了这个问题,非常感谢专家的帮助。我正在尝试获得屏幕分辨率,以便根据手机类型使用适当的布局/图像

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

本文讨论了如何在WP8中执行此操作,但请注意,我希望代码也能在WP7设备上运行。

如您链接到的MSDN文章中所述:

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


您可能需要创建一个WP8项目来定制WP8中的各种分辨率。如果您仍然希望支持WP7设备,则需要创建一个单独的WP7项目。

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


我现在没有wp8环境,但您可以看到类似的解决方案。他们用它在wp7.8上创建wilde Tile,我最后写了上面基于代码的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;
        }
    }


}

谢谢你的意见。但是,我希望避免创建多个项目。我希望使用单个WindowsPhone7(WP7)项目并创建一个在WP7和WP8设备上运行的应用程序。我的观察是针对WP7项目,无论它在什么硬件上运行,它都将返回800x480的分辨率。WP7 SDK中是否有其他API允许我读取屏幕分辨率?基本上没有,因为在WP8上运行WP7应用程序时,该应用程序将始终限于800x480。感谢Anton提出的宝贵意见。这对我很有效。