重要声明:Windows Phone 8 已停止支持
在开始之前,请务必了解:

- 微软已于 2025 年停止对 Windows Phone 8 的支持。
- Windows Phone 10 是最后一个版本,也已停止支持。
- 应用商店(Windows Phone Store)也已关闭,无法发布或更新 WP8 应用。
- 本教程的学习目的主要是技术回顾、遗产项目维护或个人兴趣,不适用于商业应用开发。
第一部分:开发环境搭建
Windows Phone 8 开发主要使用 Visual Studio 2012 或 Visual Studio 2025 Update 2,这里以更常见的 Visual Studio 2025 Update 2 为例。
安装必备软件
你需要下载并安装以下组件:
-
Visual Studio 2025 Update 2
- 这是开发 WP8 的核心 IDE,你可以从微软官方渠道下载 ISO 文件或安装程序。
- 注意: 安装时,请务必勾选 "Windows Phone SDK 8.0" 选项,它包含了 WP8 的模拟器、工具包和 SDK。
-
Windows Phone 8 SDK
(图片来源网络,侵删)- 如果你安装的是 Visual Studio 2012,则需要单独下载并安装 Windows Phone 8 SDK,它会自动集成到 VS2012 中。
-
Windows Phone 8.0 Emulator
- SDK 安装时会自动包含模拟器,但模拟器依赖于 Hyper-V 和 HAXM (Intel Hardware Accelerated Execution Manager),如果你的 CPU 不支持虚拟化技术,模拟器将无法运行,你可以通过在物理设备(如 Lumia 手机)上调试来绕过这个问题。
验证安装
安装完成后,打开 Visual Studio 2025。
- 创建新项目时,你应该能看到 "Visual C#" -> "Windows Phone" 或 "Visual Basic" -> "Windows Phone" 模板。
- 选择 "Windows Phone 应用" 模板。
- 在工具栏的调试目标下拉菜单中,你应该能看到 "Windows Phone 8.0 Emulator" 选项。
第二部分:核心概念与开发基础
WP8 应用开发基于 .NET Framework 4.5 和 Silverlight,它的 UI 框架是 XAML (eXtensible Application Markup Language)。
应用生命周期
理解 WP8 的生命周期对于编写健壮的应用至关重要,WP8 应用主要有以下几种状态:

- 运行: 应用正在前台运行,用户可以与之交互。
- 休眠: 应用被切换到后台,系统会将其进程保存在内存中,但所有线程都已停止,当用户返回时,应用会快速从内存中恢复,状态不会丢失。
- Tombstoning (墓碑化): 当内存不足时,系统会终止休眠的应用进程,但系统会保存应用的页面状态(如当前页面、导航历史、文本框内容等),当用户通过“返回”磁贴重新启动应用时,系统会先创建一个新的应用实例,然后恢复之前保存的页面状态。
- 已终止: 应用被完全从内存中移除,没有任何状态保留,重新启动应用会像第一次打开一样。
开发者需要做什么?
- 处理休眠: 在
Application_Deactivated事件中保存关键数据。 - 处理墓碑化: 在
Application_Closing事件中做最终清理,并在Application_Launching和Application_Activated事件中恢复数据。
XAML 与 UI 布局
XAML 是一种声明式的语言,用于定义 UI 的结构。
- 根元素: 一个 WP8 页面的根元素通常是
<phone:PhoneApplicationPage>。 - 常用布局容器:
- Grid: 网格布局,最常用,可以轻松创建行和列来排列控件。
- StackPanel: 栈式布局,将子元素垂直或水平堆叠。
- Canvas: 画布布局,使用绝对坐标定位元素,灵活性高但布局复杂。
- 常用控件:
TextBlock: 用于显示只读文本。TextBox: 用于输入文本。Button: 按钮。Image: 显示图片。ListBox/LongListSelector: 用于显示列表数据。
示例:一个简单的 XAML 页面
<phone:PhoneApplicationPage
x:Class="HelloWorld.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
shell:SystemTray.IsVisible="True">
<!--Grid 是最常用的布局容器-->
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!--TitlePanel 包含应用名称和页标题-->
<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
<TextBlock Text="我的应用" Style="{StaticResource PhoneTextNormalStyle}" Margin="12,0"/>
<TextBlock Text="主页" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>
<!--ContentPanel - 在此处放置页面内容-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<TextBlock Text="你好,Windows Phone 8!" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="36"/>
<Button Content="点击我" ContentTemplate="{StaticResource ButtonContentTemplate}" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,150,0,0"/>
</Grid>
</Grid>
</phone:PhoneApplicationPage>
C# 代码与事件处理
XAML 定义 UI,C# (或 VB.NET) 定义行为,事件处理是连接二者的桥梁。
示例:为按钮添加点击事件
-
在 XAML 中定义事件:
<Button x:Name="myButton" Content="点击我" Click="myButton_Click" />
-
在 C# 代码后文件中编写事件处理方法:
// 在 MainPage.xaml.cs 文件中 public partial class MainPage : PhoneApplicationPage { public MainPage() { InitializeComponent(); } private void myButton_Click(object sender, RoutedEventArgs e) { // 当按钮被点击时,这段代码会执行 MessageBox.Show("按钮被点击了!"); } }
第三部分:核心功能开发
页面导航
WP8 应用使用页面栈来管理导航。
-
导航到新页面:
NavigationService.Navigate(new Uri("/SecondPage.xaml", UriKind.Relative)); -
返回上一页:
NavigationService.GoBack(); -
传递参数: 在 URI 中添加查询字符串。
// 导航时传递参数 NavigationService.Navigate(new Uri("/SecondPage.xaml?id=123&name=张三", UriKind.Relative)); // 在目标页面 (SecondPage.xaml.cs) 的构造函数或 OnNavigatedTo 方法中接收参数 protected override void OnNavigatedTo(NavigationEventArgs e) { string id = NavigationContext.QueryString["id"]; string name = NavigationContext.QueryString["name"]; // 使用接收到的参数... }
数据存储
WP8 提供了多种本地数据存储方式:
- IsolatedStorage: 最基本的方式,提供了一个独立的文件系统空间,可以存储文件和应用程序设置。
- 存储设置:
IsolatedSettings.ApplicationSettings["Key"] = "Value"; - 存储文件: 使用
IsolatedStorageFile类操作文件。
- 存储设置:
- 本地数据库 (SQL for Windows Phone): 使用轻量级的 SQL Server CE 引擎,适合存储结构化数据,需要创建
.sdf数据库文件。 - RoutedEventArgs (Roaming Data): 允许用户的应用数据在多台设备之间同步(需要登录同一个微软账户),适用于设置、游戏进度等。
使用传感器
WP8 设备通常配备丰富的传感器,API 调用非常简单。
示例:获取设备方向
// 在页面中
private void StartOrientationSensor()
{
if (Sensor.IsSupported<SensorType.Orientation>())
{
var sensor = Sensor<SensorType.Orientation>.Default;
sensor.CurrentValueChanged += OrientationSensor_CurrentValueChanged;
sensor.Start();
}
}
private void OrientationSensor_CurrentValueChanged(object sender, SensorReadingEventArgs<SensorType.Orientation> e)
{
// 在 UI 线程上更新界面
Dispatcher.BeginInvoke(() =>
{
// e.Orientation 包含设备的方向数据
double yaw = e.Orientation.Yaw; // 偏航
double pitch = e.Orientation.Pitch; // 俯仰
double roll = e.Orientation.Roll; // 翻滚
});
}
// 在页面卸载时停止传感器
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
var sensor = Sensor<SensorType.Orientation>.Default;
sensor.Stop();
}
第四部分:发布与分发(历史信息)
现在仅作历史参考,因为相关服务已关闭。
- 应用认证: 开发者需要在 Windows Phone Dev Center 注册账户,并支付年费。
- 应用打包: 在 Visual Studio 中,右键项目 -> "存档",生成
.xap文件。 - 应用提交: 登录 Dev Center,上传
.xap文件,填写应用信息、截图、描述等,并提交审核。 - 发布: 审核通过后,应用就可以在 Windows Phone Store 中供用户下载了。
第五部分:学习资源与进阶
由于 WP8 已停止,很多官方资源已下线,但社区中仍有大量宝贵资料。
微软官方文档(存档)
- Windows Phone 开发中心 (Archive): https://msdn.microsoft.com/en-us/library/windowsphone/develop/jj207007(v=vs.105).aspx
这是最好的起点,包含了所有 API 参考、教程和指南,虽然界面是旧的,但内容依然准确。
社区与博客
- MSDN 博客: 搜索 "Windows Phone 8 development blog",可以找到许多历史文章。
- Stack Overflow: 搜索
windows-phone-8标签,有海量开发者问答。 - GitHub: 搜索
windows-phone-8,可以找到许多开源示例项目。
进阶主题
- MVVM (Model-View-ViewModel): 使用
MVVM Light等框架可以更好地分离 UI 逻辑和业务逻辑,是构建大型应用的推荐模式。 - 后台任务: 使用
Background Agent让应用在后台执行特定任务,如定期更新磁贴、收发通知等。 - WCF / RESTful API: 开发与服务器交互的应用,获取数据或提交信息。
虽然 Windows Phone 8 已成为历史,但它的开发技术(XAML, C#, .NET)与后来的 Windows 10 UWP 和现代 .NET MAUI 有着深厚的渊源,学习 WP8 是一个很好的起点,可以帮你理解微软移动平台的设计哲学,并且这些技能可以平滑地迁移到其他基于 .NET 的 UI 框架上。
希望这份教程能帮助你开启或重温 Windows Phone 8 的开发之旅!
