当前位置:编程学习 > wap >>

Windows Phone 7 开发探索笔记5——页面间导航

 本文将介绍如何在Silverlight for Windows Phone中进行页面间导航(跳转)操作。

一.NavigationService

页面间的导航操作需要通过NavigationService类来实现。首先来看演示程序的XAML代码和截图(我在项目中添加了一个页面):

页面1的XAML:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <StackPanel VerticalAlignment="Center">
                <TextBox x:Name="txtInput"></TextBox>
                <HyperlinkButton x:Name="hyperLinkButton" NavigateUri="/SubPage.xaml" Content="点此进入第2页"/>
                <Button x:Name="btnMain" Content="前往第2页" Click="btnMain_Click">
                </Button>
            </StackPanel>
</Grid>

 页面2的XAML:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <StackPanel VerticalAlignment="Center">
                <Button x:Name="btnBack" Content="前往第1页" Click="btnBack_Click">
                </Button>
            </StackPanel>
</Grid>

截图:

clip_image002clip_image004

我在第1个页面中添加了一个HyperlinkButton。HyperlinkButton生来就是用作导航的,它有一个NavigateUri属性,将这个属性设置为SubPage.xaml,点击它时会自动导航到那个页面。Button并没有这个属性,所以我需要在Code-Behind文件中添加如下代码:

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

 

NavigationService属性是定义在Page类中的,类型为NavigationService。此类型包含以下主要属性,方法和事件:

属性:

 

CanGoBack

获取一个值,指示后退导航历史记录中是否至少有一个条目。

CanGoForward

获取一个值,指示前进导航历史记录中是否至少有一个条目。

CurrentSource

获取当前显示的内容的统一资源标识符 (URI)。

Source

获取或设置当前内容或要导航到的内容的统一资源标识符 (URI)。

方法:

 

GoBack

 

GoForward

导航到前进导航历史记录中的最新条目,如果前进导航时没有条目,则引发异常。

Navigate

导航到统一资源标识符 (URI) 指定的内容。

StopLoading

停止尚未处理的异步导航。

事件:

 

FragmentNavigation

在开始导航到内容片段时发生。

Navigated

当找到正导航到的内容且此内容可用时发生。

Navigating

在请求新导航时发生。

NavigationFailed

如果在导航到所请求的内容时出现错误,则会发生此事件。

NavigationStopped

在调用 StopLoading方法时发生,或者在当前导航正在进行过程中又请求一个新导航时发生。

最常用的方法是Navigate( )方法,它需要一个Uri类的参数,所以我们需要将相应的路径封装到一个Uri类中。在页面2中那个Button的Click事件处理程序里我添加了如下的代码:

if (this.NavigationService.CanGoBack)
    NavigationService.GoBack();

首先,检测后退导航历史中是否有条目,如果在没有条目的情况下调用GoBack方法会引发异常,如下图(我在页面1的事件处理程序中使用了GoBack方法):

\

 

当然,在第2页的Click事件中也可以不使用GoBack,而用Navigate( )方法,如下:

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

 

但这和GoBack方法有本质区别。为什么这么说呢:因为无论是使用HyperlinkButton的NavigateUri属性还是NavigationService类的Navigate方法,系统都会为要导航到的页面创建一个全新的实例并显示它,这些都是在幕后完成的,对我们来说是透明的。但GoBack方法是从后退导航历史中查找最近的一个页面并加载它,并没有创建实例的动作。

 

下面来验证一下:运行程序,在页面1中的文本框中输入一些文本

clip_image008

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,