我遇到了问题,希望得到专家的帮助。我试图获得屏幕分辨率,以便我可以使用基于手机类型的适当布局/图像。
我的项目类型是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;
MSDN文章讨论了如何在WP8中执行此操作,但请注意我希望代码也能在WP7设备上运行。
答案 0 :(得分:3)
我最后编写了以下基于Anton Sizikov推荐的代码。它使用反射来读取ScaleFactor属性。如果在WP8设备上运行7.1 App,则反射将返回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;
}
}
}
答案 1 :(得分:2)
如您在MSDN文章中所述:MSDN
Windows Phone 7仅支持单个分辨率,800 x 480.由于您的项目定位到WP7,这将是预期的行为。如果您正在开发Windows Phone 8项目,那么您应该看到App.Current.Host.Content.ScaleFactor应该返回不同的结果。
您可能需要创建一个WP8项目来自定义WP8中的各种分辨率。如果您仍想支持WP7设备,则需要创建一个单独的WP7项目。
答案 2 :(得分:1)
您可以尝试使用反射加载App.Current.Host.Content.ScaleFactor
。
我现在没有我的wp8环境,但你可以看到类似的解决方案here。他们用它在wp7.8
上创建wilde tile