Windows Phone Navigate

在应用的开发过程中,我们可能需要使用不止一个页面来完成不同的功能,此时就需要在不同页面间导航,如同在asp.net中一样,在Windows Phone中,就会使用到NavigationService和NavigationContext等相关类来完成这些工作。本文就来介绍关于Navigation的基本使用方式。

从当前页面导航到其他页面:

NavigationService.Navigate(new Uri("/Detail.xaml", UriKind.Relative));

如果需要传递参数到待目标页面,可以使用类似于web url中的参数方式:

string url = string.Format("/Detail.xaml?Click={0}", hbEditDetail.Name);
this.NavigationService.Navigate(new Uri(url, UriKind.Relative));

在目标页面,我们可以使用NavigationContext中的Dictionary<string,string>属性来获取传递的参数值:

if (NavigationContext.QueryString.ContainsKey("Click"))
{
tbQueryString.Text
= string.Format("You clicked the control {0}",
NavigationContext.QueryString[
"Click"]);
}

在实际使用中,可能有很多页面,并且我们希望能在这些页面间共享数据,那么我们可以通过在App类中定义需要的公共属性等,那么在需要获取共享的数据时,只需通过Application.Current来处理。这样就避免了我们需要在每个页面上定义需要的QueryString,对于一些重复的共享数据,这样会有一定的好处。

另外,在导航页面时使用的NavigationService.Navigate时,需要指定待导航页面的名称及路径,我们也可以通过定义一些全局变量来管理这些数据,可以使用扩展方法的方式来对PhoneApplicationPage类提供额外的功能,具体参考如下(参考MS的官方样例):

View Code
public enum ApplicationPages
{
DataList,
DataView,
DataEdit,
Report
}

public static class Navigation
{
/// <summary>
/// go to page.
/// </summary>
/// <param name="applicationPage">The application page.</param>
public static void GoToPage(this PhoneApplicationPage phoneApplicationPage, ApplicationPages applicationPage)
{
switch (applicationPage)
{
case ApplicationPages.DataList:
phoneApplicationPage.NavigationService.Navigate(
new Uri("/Views/DataList.xaml", UriKind.Relative));
break;

case ApplicationPages.DataView:
phoneApplicationPage.NavigationService.Navigate(
new Uri("/Views/DataView.xaml", UriKind.Relative));
break;

case ApplicationPages.DataEdit:
phoneApplicationPage.NavigationService.Navigate(
new Uri("/Views/DataEdit.xaml", UriKind.Relative));
break;

case ApplicationPages.Report:
phoneApplicationPage.NavigationService.Navigate(
new Uri("/Views/Report.xaml", UriKind.Relative));
break;
}
}
}

在页面中调用该方法:

this.GoToPage(ApplicationPages.DataEdit);

  

  

  

  

posted @ 2011-09-07 14:11  FlorCava  阅读(685)  评论(0编辑  收藏  举报