页面导航的例子我们使用的是两个页面,从第一个页面(MainPage)导航到第二个页面(SecondPage),然后可以从第二个页面导航到第一个页面 ,使用的os 7.1;
页面导航没有引入新的命名空间使用的到属性是派生于PhoneApplicationPage类;
MainPage.xaml 文件中用到的代码为:
<TextBlock x:Name= " Navigation " Text= " 导航到第二个页面 " Grid.Row= " 1 " VerticalAlignment= " Center " HorizontalAlignment= " Center " ManipulationStarted= " Navigation_ManipulationStarted "></TextBlock>
</Grid>
隐藏文件代码为:
private void Navigation_ManipulationStarted( object sender, ManipulationStartedEventArgs e)
{
// 为什么一定是相对的--知识点①
this.NavigationService.Navigate( new Uri( " /SecondPage.xaml ", UriKind.Relative));
e.Complete();
e.Handled = true;
}
protected override void OnManipulationStarted(ManipulationStartedEventArgs e)
{
// 知识点②
SolidColorBrush scb= new SolidColorBrush ();
// 知识点③
Color color = new Color();
color.A = ( byte) 245;
color.R = ( byte) 135;
color.G = ( byte) 25;
color.B = ( byte) 15;
scb.Color = color;
ContentPanel.Background = scb;
base.OnManipulationStarted(e);
}
隐藏文件的代码是在默认代码的基础上加上以上两个方法,实现的效果是当点击(触摸)非名为Navigation的TextBlock元素时,ContenPanel就会改变为设置好的固定颜色,MainPage效果图:
知识点①:this.NavigationService.Navigate() 是页面导航的核心方法参数是URI类型的对象,所以要New该类,并且实例化URI的时候SecondPage.xaml前有斜线,第二个参数表明 此URI是相对于SecondPage.xaml,绝对的URI是指完整引用某个资源如: http://www.sensengo.com/Index.html 相对URI取决于前面定义的基 URI(例如:/Index.html)
URI的构造函数有一个包含了基URI和相对URI字符串:
根据指定的基 URI 和相对 URI 字符串,初始化 Uri 类的新实例 |
实例:
Uri myUri = new Uri(baseUri, " catalog/shownew.htm ");
所以URI实例构成了绝对URI,myUri.ToString()字符串是为:http://www.contoso.com/catalog/shownew.htm
Color.FromArgb(245,(byte)135,(byte)25,(byte)15));
SecondPage.xaml 文件主要代码:
<TextBlock x:Name= " Navigation " Text= " 导航到第-个页面 " Grid.Row= " 1 " VerticalAlignment= " Center " HorizontalAlignment= " Center " ManipulationStarted= " Navigation_ManipulationStarted "></TextBlock>
</Grid>
隐藏文件添加的两个方法代码:
private void Navigation_ManipulationStarted( object sender, ManipulationStartedEventArgs e)
{
// 两个方式实现的效果一样,但是原理不同--知识点④
this.NavigationService.Navigate( new Uri( " /MainPage.xaml ", UriKind.Relative));
// this.NavigationService.GoBack();
e.Complete();
e.Handled = true;
}
protected override void OnManipulationStarted(ManipulationStartedEventArgs e)
{
// 纯色
SolidColorBrush scb = new SolidColorBrush();
// alpha
Color color = new Color();
color.A = ( byte) 255;
color.R = ( byte) 145;
color.G = ( byte) 35;
color.B = ( byte) 15;
scb.Color = color;
ContentPanel.Background = scb;
base.OnManipulationStarted(e);
}
知识点④:在这里因为只有两个页面,返回到上一个页面的效果一样,但是原理不同,this.NavigationService.Navigate是实现一个新的URI实例,this.NavigationService.GoBack()则是后退到历史记录中的最新页面,如果没有历史记录页面则退出程序;
知识点⑤ : 墓碑化:因为windows phone手机不支持第三方程序后台,所以提供了另一种方法Tomstone,简单的讲就是在程序A还在运行的情况下,突然其他程序B,此时系统会暂时关 闭程序A的线程,并暂存其状态;当程序B使用完毕,程序A线程会重新启动,恢复程序A之前的状态;本节的页面导航就是墓碑化的例子
小结
:导航的核心一句话就是:this.NavigationService.Navigate()和返回上一个页面
this.NavigationService.GoBack(),简单了解墓碑化
本文转自shenzhoulong 51CTO博客,原文链接:http://blog.51cto.com/shenzhoulong/831462,如需转载请自行联系原作者