一個稍微複雜一點的應用中,可能會用到多個頁面,要在這些頁面中跳轉,就必須用到導航功能。
下面這個執行個體實現的功能是:從首頁面MainPage導航到頁面SecondPage,然後再從SecondPage返回到MainPage頁面這樣一個準系統。
MainPage XAML代碼:
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<TextBlock Text="Navigate to Second Page!"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Padding="0,34"
ManipulationStarted="TextBlock_ManipulationStarted"/>
</Grid>
MainPage C#代碼:
public partial class MainPage : PhoneApplicationPage
{
// 建構函式
public MainPage()
{
InitializeComponent();
}
private void TextBlock_ManipulationStarted(object sender, ManipulationStartedEventArgs e)//處理ManipulationStarted事件
{
//todo:當單擊TextBlock時跳轉到SecondPage頁面
this.NavigationService.Navigate(new Uri("/SecondPage.xaml", UriKind.Relative));//調用NavigationService類的Navigate()方法實現導航
e.Complete();//表示不再處理其它Manipulation事件
e.Handled = true;//標記路由事件已處理,不需要向上傳遞事件
}
}
SecondPage XAML代碼:
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<TextBlock Text="Go back to Main Page"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Padding="0,34"
ManipulationStarted="TextBlock_ManipulationStarted"/>
</Grid>
SecondPage C#代碼:
public partial class SecondPage : PhoneApplicationPage
{
public SecondPage()
{
InitializeComponent();
}
private void TextBlock_ManipulationStarted(object sender, ManipulationStartedEventArgs e)//處理ManipulationStarted事件
{
//todo:返回到Main Page頁面
this.NavigationService.GoBack();//調用NavigationService類的GoBack()方法返回到前一個頁面,等價於下一行代碼
//this.NavigationService.Navigate(new Uri("/MainPage.xaml",UriKind.Relative));//不同的是程式不再回到原來的MainPage執行個體,而是導航到一個新的MainPage執行個體
e.Complete();
e.Handled = true;
}
}
效果
點擊TextBlock導航到SecondPage頁面 點擊TextBlock返回到MainPage頁面
注意:1,ManipulationStarted事件,是在對UIElement對象(在這裡指TextBlock)開始操作時發生。即單擊它就立即發生。
2,NavigationService屬性,它是Page類中定義的唯讀屬性,它是NavigationService類型的,而NavigationService類是密封類,我們不能對其進行執行個體化,而由宿主類型建立它們自己的NavigationService執行個體,其中NavigationService類中包含了Navigate()方法和GoBack()方法。
3,注意this.NavigationService.GoBack()和this.NavigationService.Navigate(new Uri("/MainPage.xaml",UriKind.Relative))的區別,雖然它們實現的效果是一樣的,但是它們的原理是不一樣的。
下一篇將總結Silverlight應用程式中頁面間資料的傳遞。