适用于:仅限于 Windows Phone 8。
Windows Phone 8 支持具有 WVGA、WXGA 和 720p 分辨率的手机。这与仅支持 WVGA 分辨率的 Windows Phone OS 7.1 不同。本主题将介绍 Windows Phone 8 支持的分辨率,以及如何使用不同的分辨率开发面向手机的应用。
本主题包含以下各节。
支持的分辨率
适应您的布局
分辨率相关的背景和资产
初始屏幕
图块和应用图标
相关主题
支持的分辨率
下表描述了 Windows Phone 8 中支持的分辨率和纵横比。
分辨率
分辨率
纵横比
与 Windows Phone OS 7.1 相比的新增内容
按比例缩放的分辨率
WVGA
480 × 800
15:9
无。这是 Windows Phone OS 7.1 唯一支持的分辨率。
480 × 800
WXGA
768 × 1280
15:9
1.6x 方向缩放
480 × 800
720p
720 × 1280
16:9
1.5x 方向缩放,高度增加 80 个像素(缩放后为 53 个像素)
480 × 853
下图所示为同一屏幕显示在具有不同分辨率的手机中。
适应您的布局
由于所有 Windows Phone OS 7.1 手机均具有相同的分辨率,您可以布局内容以使之在 Windows Phone OS 7.1 手机上显示良好,并确定它将在所有 Windows Phone OS 7.1 手机上显示良好。您无需考虑每个控件如何伸展和流动等内部问题。
在 Windows Phone 8 中,您需要布局控件和其他 UI 元素,以使之在每种支持的纵横比中显示良好。因为 Windows Phone 8 手机具有两种纵横比(15:9 或 16:9),针对一种纵横比布局的控件可能在另一种纵横比下出现意外布局。
若要使页面能在分辨率为 WVGA、WXGA 和 720p 的手机上正确显示,则不要硬编码控件的长和宽或边距。从工具箱中拖放控件后,请删除或仔细测试自动添加的边距。
若要创建可适应布局,您可以使用像网格控件之类的容器。不是对控件的高和宽进行硬编码,而是将控件放置在网格中,并使用 * 和 Auto 值设置其行和列的高和宽。如此一来,应用可以拉伸或缩放控件以使之适合用户手机的高和宽。如果您对控件的高和宽进行硬编码,布局不适应其他分辨率。
以下 XAML 显示使用网格控件实现这些准则的布局的代码。
public enum Resolutions { WVGA, WXGA, HD720p };
public static class ResolutionHelper
{
private static bool IsWvga
{
get
{
return App.Current.Host.Content.ScaleFactor == 100;
}
}
private static bool IsWxga
{
get
{
return App.Current.Host.Content.ScaleFactor == 160;
}
}
private static bool Is720p
{
get
{
return App.Current.Host.Content.ScaleFactor == 150;
}
}
public static Resolutions CurrentResolution
{
get
{
if (IsWvga) return Resolutions.WVGA;
else if (IsWxga) return Resolutions.WXGA;
else if (Is720p) return Resolutions.HD720p;
else throw new InvalidOperationException("Unknown resolution");
}
}
}
上述类使用 ScaleFactor 属性确定设备的分辨率。
添加包含以下代码的名为 MultiResImageChooser.cs 的类。此类使用在上一步中创建的ResolutionHelper.cs 类来确定设备的分辨率。然后,它将返回新的 BitmapImage(从对应于检测到的分辨率的图像的 URI 中创建出)。
C#
View Code
using System.Windows.Media.Imaging;
public class MultiResImageChooserUri
{
public Uri BestResolutionImage
{
get
{
switch (ResolutionHelper.CurrentResolution)
{
case Resolutions.HD720p:
return new Uri("Assets/MyImage.screen-720p.jpg", UriKind.Relative);
case Resolutions.WXGA:
return new Uri("Assets/MyImage.screen-wxga.jpg", UriKind.Relative);
case Resolutions.WVGA:
return new Uri("Assets/MyImage.screen-wvga.jpg", UriKind.Relative);
default:
throw new InvalidOperationException("Unknown resolution type");
}
}
}
}