WindowsPhone开发深入解析:导航事件与参数传递
26 浏览量
更新于2024-08-28
收藏 161KB PDF 举报
"WindowsPhone开发(四)--导航事件和传值"
在Windows Phone应用程序开发中,导航是用户体验的重要组成部分,允许用户在不同的页面之间切换。本篇将深入探讨NavigationService类和Frame对象在导航中的作用,以及如何处理导航事件和传递参数。
NavigationService类是Windows Phone应用程序中用于页面间导航的关键组件,它提供了导航到新页面、回退到前一个页面等方法。当用户点击按钮或执行其他操作时,通常会触发导航。然而,在某些情况下,如果不正确地设置应用程序的根视觉元素(RootVisual),可能会导致NavigationService对象为空,从而引发NullReferenceException异常。例如,在示例代码中,如果没有将Frame设置为RootVisual,直接通过Page的NavigationService属性进行导航就会出现问题。
在上述代码中,我们看到两种导航方法:
1. 使用Page的NavigationService属性导航:
```csharp
this.NavigationService.Navigate(new Uri("/Page1.xaml", UriKind.Relative));
```
2. 直接通过Frame对象导航:
```csharp
(Application.Current as App).RootFrame.Navigate(new Uri("/Page1.xaml", UriKind.Relative));
```
这两种方法在正常情况下效果相同,都是导航到Page1.xaml。但当RootVisual未设置为Frame时,NavigationService导航会失败,因为此时NavigationService对象未初始化。
为了避免这种错误,应在应用程序启动时确保已将Frame设置为RootVisual。通常,这会在App.xaml.cs的OnLaunched方法中完成:
```csharp
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
// ...
if (RootVisual != RootFrame)
{
RootVisual = RootFrame;
}
// ...
}
```
除了导航,我们还需要关注导航事件。在Windows Phone开发中,有两个主要的导航事件:Navigating和Navigated。Navigating事件在导航开始之前触发,可以用来取消导航或做一些预处理工作。Navigated事件在导航完成后触发,这时可以获取到目标页面并进行初始化操作。
在页面之间传递参数也是常见的需求。NavigationService提供了一个方法Navigate(Uri, Object),第二个参数可以用来传递数据。例如:
```csharp
var parameter = new { ID = 1 };
this.NavigationService.Navigate(new Uri("/Page1.xaml", UriKind.Relative), parameter);
```
在目标页面(这里是Page1.xaml)中,可以通过NavigationContext的QueryString或State属性获取这些参数:
```csharp
protected override void OnNavigatedTo(NavigationEventArgs e)
{
var parameter = (dynamic)e.Parameter;
int id = parameter.ID;
// ...
}
```
通过这种方式,我们可以方便地在页面间传递信息,实现更复杂的业务逻辑。
总结起来,Windows Phone应用中的导航涉及NavigationService和Frame对象,需要确保正确设置RootVisual以避免导航错误。同时,了解和利用导航事件以及参数传递机制,可以帮助我们更好地控制应用程序的导航流程和数据交换,提升用户体验。在实际开发中,还需注意优化导航性能,如避免不必要的页面实例化和内存泄漏。
2011-07-03 上传
2018-08-28 上传
2014-07-18 上传
2011-09-11 上传
2013-03-27 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
weixin_38607552
- 粉丝: 7
- 资源: 944
最新资源
- 数据库课程设计-员工信息管理系统(基于pymysql实现).zip
- Desktop_demon_LOFAR_舰船噪声_demon谱_lofardemon
- 屏蔽泵转子的支承轴承及其材料.rar
- Excel模板大学管理学科工商管理类教学计划.zip
- Patterns:无需编写任何JavaScript即可快速应用丰富的交互模式的库
- PH315-52-79VM
- html5-boilerplate-tamasverhoest-howest:html5-boilerplate-tamasverhoest-howest由GitHub Classroom创建
- bash-scan
- todo-list-app
- agile_methods:不同敏捷方法的可视化
- shuntaidianliu_spwm_瞬态电流整流_瞬态电流控制_experimentalPWM_单相PWM整流器
- 基于 Kotlin + MVP + Retrofit + RxJava.zip
- Excel模板大学考前辅导表.zip
- aoc2020:Code 2020的出现
- Assemblytics:Assemblytics是一种生物信息学工具,可通过将其与参考基因组进行比较来检测和分析基因组装配中的结构变体
- cashtray-client