windowsphone开发页面导航.docx
- 文档编号:30348595
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:16
- 大小:467.15KB
windowsphone开发页面导航.docx
《windowsphone开发页面导航.docx》由会员分享,可在线阅读,更多相关《windowsphone开发页面导航.docx(16页珍藏版)》请在冰豆网上搜索。
windowsphone开发页面导航
在应用的开发过程中,我们可能需要使用不止一个页面来完成不同的功能,此时就需要在不同页面间导航,如同在中一样,在WindowsPhone中,就会使用到NavigationService和NavigationContext等相关类来完成这些工作。
本文就来介绍关于Navigation的基本使用方式。
从当前页面导航到其他页面:
viewsource
print?
1
NavigationService.Navigate(newUri("/Detail.xaml",UriKind.Relative));
如果需要传递参数到待目标页面,可以使用类似于weburl中的参数方式:
viewsource
print?
1
stringurl=string.Format("/Detail.xaml?
Click={0}",hbEditDetail.Name);
2
this.NavigationService.Navigate(newUri(url,UriKind.Relative));
在目标页面,我们可以使用NavigationContext中的Dictionary
viewsource
print?
1
if(NavigationContext.QueryString.ContainsKey("Click")){
2
tbQueryString.Text=string.Format("Youclickedthecontrol{0}",NavigationContext.QueryString["Click"]);
3
}
在实际使用中,可能有很多页面,并且我们希望能在这些页面间共享数据,那么我们可以通过在App类中定义需要的公共属性等,那么在需要获取共享的数据时,只需通过Application.Current来处理。
这样就避免了我们需要在每个页面上定义需要的QueryString,对于一些重复的共享数据,这样会有一定的好处。
另外,在导航页面时使用的NavigationService.Navigate时,需要指定待导航页面的名称及路径,我们也可以通过定义一些全局变量来管理这些数据,可以使用扩展方法的方式来对PhoneApplicationPage类提供额外的功能,具体参考如下(参考MS的官方样例):
viewsource
print?
01
publicenumApplicationPages
02
{
03
DataList,
04
DataView,
05
DataEdit,
06
Report
07
}
08
09
publicstaticclassNavigation
10
{
11
///
12
///gotopage.
13
///
14
///
15
publicstaticvoidGoToPage(thisPhoneApplicationPagephoneApplicationPage,ApplicationPagesapplicationPage)
16
{
17
switch(applicationPage)
18
{
19
caseApplicationPages.DataList:
20
phoneApplicationPage.NavigationService.Navigate(newUri("/Views/DataList.xaml",UriKind.Relative));
21
break;
22
23
caseApplicationPages.DataView:
24
phoneApplicationPage.NavigationService.Navigate(newUri("/Views/DataView.xaml",UriKind.Relative));
25
break;
26
27
caseApplicationPages.DataEdit:
28
phoneApplicationPage.NavigationService.Navigate(newUri("/Views/DataEdit.xaml",UriKind.Relative));
29
break;
30
31
caseApplicationPages.Report:
32
phoneApplicationPage.NavigationService.Navigate(newUri("/Views/Report.xaml",UriKind.Relative));
33
break;
34
}
35
}
36
}
在页面中调用该方法:
viewsource
print?
1
this.GoToPage(ApplicationPages.DataEdit);
2>
跟林永坚老师学WP7开发
∙内容概览
∙使用xaml进行导航
∙使用C#代码进行导航
∙地址别名
∙页面之间的数据传递
∙回退按钮
为了更好的控制导航,我们需要先知道页面的架构与框架:
∙Frame
∙只有一个单独的PhoneApplicationFrame
∙包含一个或多个PhoneApplicationPage
∙也包含系统托盘和应用程序栏
∙Page
∙包含标题,可以有独立的应用程序栏
∙Page之间可以相互导航
∙SIlverlightforwindowphone使用以页面为基础的页面导航
∙与web的页面导航类似
∙每个独立的都有唯一的URI
∙每个独立的页面都是没有状态的
概念介绍完了,下面就是例子了:
∙XAML中使用导航
在导航里的一个很重要的控件:
hyplinkbutton,所以我先拖四个hyplinkbutton到界面中来,
这样就是主页面了,接下来再创建一个新的导航到的页面Music.xaml到views目录下,然后添加contant为音乐的hyperlinkbutton的NavigateUri
这样启动程序就可以正常的导航了,下面的三个按照同样的操作就可以了,
∙用C#代码进行导航(使用到一个很重要的类)
∙使用别名进行导航需要3步:
第一步需要在App.xaml文件里定义映射规则,第二部在App.xaml.cs里初始化这个定义的Resource
第二部在App.xaml.cs里初始化这个定义的Resource
第三步:
在页面里使用,把HyperLinkButton的NavigationURi属性修改成如下,到此别名导航就完成了。
Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> ∙页面间传递数据,最常用的是通过QueryString来传递数据, song=歌曲1"Height="30" HorizontalAlignment="Left" Margin="175,230,0,0" Name="hyperlinkButton2"VerticalAlignment="Top" Width="200" /> ∙在Music.xaml页面被加载的时候我们就显示传递过来的参数, using System; using System.Collections.Generic; ∙ using System.Linq; using System.Net; ∙ using System.Windows; using System.Windows.Controls; ∙ using System.Windows.Documents; using System.Windows.Input; ∙ using System.Windows.Media; using System.Windows.Media.Animation; ∙ using System.Windows.Shapes; using Microsoft.Phone.Controls; ∙ namespace PageNavigation.views ∙ { public partial class Music: PhoneApplicationPage ∙ { public Music() ∙ { InitializeComponent(); ∙ } ∙ private void PhoneApplicationPage_Loaded(object sender,RoutedEventArgse) { ∙ if (NavigationContext.QueryString.Count>0) { ∙ textBlock1.Text=NavigationContext.QueryString["song"]; } ∙ } ∙ } } ∙使用别名来传递参数,首先需要修改App.xaml里的映射规则 页面修改为 注意: NavigationService默认不能传递对象(可以通过使用App类的静态属性、SIngleton类、把对象分解为QueryString来传递......) 3小技巧 前文用几个例子对导航做了简单介绍,在一般应用中,使用上一篇文章中说到的方法,其实也够用了,不过,为了能够处理一些特殊的情况,有几个小技巧还是有必要了解一下的。 一、到底该不该设置“后退”操作? 因为手机的硬件层就有一个“回退”按钮,按理说我们不需要在程序中再添加什么回退按钮之类的,不过,还是有必要看看如何手动加入回退功能。 1、新建一个WP应用项目。 2、除默认的主页外,新建一个页面Page2.xaml。 3、在主页上放一个按钮,编写Click事件处理代码,导航到Page2。 源码打印? 1.private void button1_Click(object sender, RoutedEventArgs e) 2.{ 3. this.NavigationService.Navigate(new Uri("/Page2.xaml", UriKind.Relative)); 4.} 4、在Page2也放一个按钮,并编写单击事件处理代码。 4、在Page2也放一个按钮,并编写单击事件处理代码。 4、在Page2也放一个按钮,并编写单击事件处理代码。 源码打印? 1.private void button1_Click(object sender, RoutedEventArgs e) 2.{ 3. this.NavigationService.GoBack(); 4.} 5、现在,你可以欣赏你的程序了。 二、如何屏蔽掉“回退”按钮? 这种情况下不多见,屏蔽掉回退按钮意味着无法通过按下“回退”进行向后导航,这个做法要慎用。 要完成该操作,就得处理BackKeyPress事件,把事件参数e的Cancel属性设置为true即可取消“回退”键的操作。 源码打印? 1.this.BackKeyPress += (sender, e) => 2. { 3. e.Cancel = true; 4. }; 三、如何删除导航历史记录? 比如说,我现在从主页导航到页面B,再从页面B导航到页面C,但我不希望用户导航回页面B,而是直接导航回主页。 准备三个页面做测试,从主页导航到B,从B导航到C,应该没问题了,不用我再重复。 然后,因为现在我们要在导航的回退历史记录中删除页面B,所以,我们在离开页面B后把历史记录删除。 也就是说,在页面B中重写OnNavigatedFrom方法。 源码打印? 1.protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) 2.{ 3. base.OnNavigatedFrom(e); 4. PhoneApplicationFrame myFrame = Application.Current.RootVisual as PhoneApplicationFrame; 5. if (myFrame ! = null) 6. { 7. try 8. { 9. myFrame.RemoveBackEntry(); 10. } 11. catch (InvalidOperationException ex) 12. { 13. MessageBox.Show(ex.Message); 14. } 15. } 16. 17.} 从例子中看到,使用PhoneApplicationFrame类的RemoveBackEntry方法删除最新一条记录,每次只删除一条,要删除多条,就调用N次。 因为导航历史记录是栈结构的,后进先出,所以,就像你拿一堆书放在桌面上一样,首先拿掉的是放在最上面的,如下图所示: 从例子中看到,使用PhoneApplicationFrame类的RemoveBackEntry方法删除最新一条记录,每次只删除一条,要删除多条,就调用N次。 因为导航历史记录是栈结构的,后进先出,所以,就像你拿一堆书放在桌面上一样,首先拿掉的是放在最上面的,如下图所示:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- windowsphone 开发 页面 导航
![提示](https://static.bdocx.com/images/bang_tan.gif)