Windows Phone笔记(7)页面间导航以及数据传递
Windows Phone笔记之前的示例都只是基于单个页面的简单示例,一般是继承了PhoneApplicationPage类的MainPage页面,但是实际中的应用程序却不可能这么简单,肯定都是由多个页面组成的,那么这就要求我们首先要了解:Windows Phone的页面之间是如何跳转(导航)的?以及如何在页面间传值?这就是这篇笔记需要解决的问题。
1.页面间的导航
Windows Phone中页面间的导航非常简单,有过B/S开发经验的开发人员会发现Windows Phone页面间的导航基本上和HTML页面的导航一样。现在我们通过一个简单的示例程序来了解在Windows Phone中如何进行页面间的跳转(导航)。
首先创建一个Silverlight for Windows Phone项目,MainPage.xaml代码如下:
1 <!--ContentPanel - 在此处放置其他内容-->
2 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
3 <TextBlock Text="Navigation to SecondPage" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="32" Padding="0 34" Name="tblNavigationToSecondPage" ManipulationStarted="tblNavigationToSecondPage_ManipulationStarted"></TextBlock>
4 </Grid>
后台处理MainPage.xaml.cs页面的代码:
1 public partial class MainPage : PhoneApplicationPage
2 {
3 Random ran = new Random();
4 // 构造函数
5 public MainPage()
6 {
7 InitializeComponent();
8 }
9
10 /// <summary>
11 /// 触摸TextBlock以外的屏幕时发生
12 /// </summary>
13 /// <param name="e"></param>
14 protected override void OnManipulationStarted(ManipulationStartedEventArgs e)
15 {
16 ContentPanel.Background = new SolidColorBrush(Color.FromArgb(255, (byte)ran.Next(255), (byte)ran.Next(255), (byte)ran.Next(255)));
17 base.OnManipulationStarted(e);
18 }
19
20 /// <summary>
21 /// 触摸TextBlock控件跳转到SecondPage
22 /// </summary>
23 /// <param name="sender"></param>
24 /// <param name="e"></param>
25 private void tblNavigationToSecondPage_ManipulationStarted(object sender, ManipulationStartedEventArgs e)
26 {
27 this.NavigationService.Navigate(new Uri("/SecondPage.xaml", UriKind.Relative));
28
29 e.Complete();
30 e.Handled = true;
31 }
32 }
完成MainPage页面代码编写后,新建一个SecondPage页面
SecondPage.xaml代码:
1 <!--ContentPanel - 在此处放置其他内容-->
2 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
3 <TextBlock Text="Go Back to SecondPage" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="32" Padding="0 34" Name="tblNavigationToMainPage" ManipulationStarted="tblNavigationToMainPage_ManipulationStarted"></TextBlock>
4 </Grid>
后台处理SecondPage.xaml.cs代码:
1 public partial class Second : PhoneApplicationPage
2 {
3 Random ran = new Random();
4 public Second()
5 {
6 InitializeComponent();
7 }
8
9 private void tblNavigationToMainPage_ManipulationStarted(object sender, ManipulationStartedEventArgs e)
10 {
11 this.NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
12 //this.NavigationService.GoBack();
13 e.Complete();
14 e.Handled = true;
15 }
16 }
以上是该示例的全部代码,两个页面的结构类似,点击TextBlock控件以外的屏幕区域就会改变页面背景颜色,点击MainPage页面的TextBlock控件会跳转到SecondPage页面,如果点击SecondPage页面的话就会调用页面的GoBack()方法,那么现在我们通过运行程序来分析页面导航的一些技术要点。
首先点击MainPage页面,改变页面的背景色,然后点击TextBlock控件跳转到SecondPage页面,点击SecondPage页面的TextBlock控件退回MainPage页面:
下面我们做一个简单的修改,把SecondPage页面的TextBlock元素触摸事件的处理代码改为:
1 private void tblNavigationToMainPage_ManipulationStarted(object sender, ManipulationStartedEventArgs e)
2 {
3 this.NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
4 //this.NavigationService.GoBack();
5 e.Complete();
6 e.Handled = true;
7 }
再次和刚才一样的操作,运行效果如下:
Silverlight for Windows Phone的导航系统是基于栈(stack)的,stack是一种后进先出的数据结构。在这里我们把调用Navigate()方法的页面成为源(source)页面,把导航到的页面成为目
补充:移动开发 , Windows Phone ,