windowsphone开发页面导航.docx

上传人:b****5 文档编号:30348595 上传时间:2023-08-13 格式:DOCX 页数:16 大小:467.15KB
下载 相关 举报
windowsphone开发页面导航.docx_第1页
第1页 / 共16页
windowsphone开发页面导航.docx_第2页
第2页 / 共16页
windowsphone开发页面导航.docx_第3页
第3页 / 共16页
windowsphone开发页面导航.docx_第4页
第4页 / 共16页
windowsphone开发页面导航.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

windowsphone开发页面导航.docx

《windowsphone开发页面导航.docx》由会员分享,可在线阅读,更多相关《windowsphone开发页面导航.docx(16页珍藏版)》请在冰豆网上搜索。

windowsphone开发页面导航.docx

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

///Theapplicationpage.

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次。

因为导航历史记录是栈结构的,后进先出,所以,就像你拿一堆书放在桌面上一样,首先拿掉的是放在最上面的,如下图所示:

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1