WindowsPhone开发深入解析:导航事件与参数传递
80 浏览量
更新于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以避免导航错误。同时,了解和利用导航事件以及参数传递机制,可以帮助我们更好地控制应用程序的导航流程和数据交换,提升用户体验。在实际开发中,还需注意优化导航性能,如避免不必要的页面实例化和内存泄漏。
2018-08-28 上传
2013-02-27 上传
2011-07-03 上传
2013-03-27 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
weixin_38607552
- 粉丝: 7
- 资源: 944
最新资源
- 火炬连体网络在MNIST的2D嵌入实现示例
- Angular插件增强Application Insights JavaScript SDK功能
- 实时三维重建:InfiniTAM的ros驱动应用
- Spring与Mybatis整合的配置与实践
- Vozy前端技术测试深入体验与模板参考
- React应用实现语音转文字功能介绍
- PHPMailer-6.6.4: PHP邮件收发类库的详细介绍
- Felineboard:为猫主人设计的交互式仪表板
- PGRFileManager:功能强大的开源Ajax文件管理器
- Pytest-Html定制测试报告与源代码封装教程
- Angular开发与部署指南:从创建到测试
- BASIC-BINARY-IPC系统:进程间通信的非阻塞接口
- LTK3D: Common Lisp中的基础3D图形实现
- Timer-Counter-Lister:官方源代码及更新发布
- Galaxia REST API:面向地球问题的解决方案
- Node.js模块:随机动物实例教程与源码解析