Windows8中是没有对话框的概念的,不同的界面有不同的页面,类似于网页一样的浏览模式。

通过Frame.Navigate(typeof(TestPage),obj)的方式来实现不同页面的导航。

NavigationServer的属性方法有:

GoBack()后退,GoForward()前进,CanGoBack()判断是否可以后退。

页面导航默认是不启用缓存的,也就是后退之后的前一个页面恢复成原始的状态。

如果需要开启,在构造函数中可以使用以下代码:

[csharp] view plaincopy
  1. NavigationCacheMode = NavigationCacheMode.Enabled;

下面新建一个项目TestNavigation来说明导航栏的使用。

给项目添加两个空白页面MainPage1和MainPage2和MainPage3来进行测试:

在App.xaml.cs将启动页面设置为MainPage1(找到typeof,将MainPage改成MainPage1即可)。

在MainPage1添加一个按钮来跳转到Page3。

[html] view plaincopy
  1. <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
  2. <Button Content="Go to Page3" HorizontalAlignment="Left" Margin="200,100,0,0"
  3. VerticalAlignment="Top"/>
  4. </Grid>

双击该按钮,设置点击之后的方法:

[csharp] view plaincopy
  1. private void Button_Click_1(object sender, RoutedEventArgs e)
  2. {
  3. Frame.Navigate(typeof(MainPage3));
  4. }

这样运行项目,点击之后便会发现自动跳转到了对应的界面。

接下来,在MainPage3的页面上加一个后退按钮:

[html] view plaincopy
  1. <Button Content="Back" HorizontalAlignment="Left" VerticalAlignment="Top"/>

双击该按钮如下添加代码:

[csharp] view plaincopy
  1. private void Button_Click_1(object sender, RoutedEventArgs e)
  2. {
  3. Frame.GoBack();
  4. }

运行项目,则点击该按钮可以后退。

如此便实现了两个页面的导航,而这个Frame是Page类的一个属性。

那么怎么给页面传参呢?

其实Navigate方法还有一个重载方法:

[csharp] view plaincopy
  1. public bool Navigate(Type sourcePageType);
  2. public bool Navigate(Type sourcePageType, object parameter);

也就是说第二个参数传什么都可以,是一个object对象。

那么我们下面来做一个测试。

首先是在MainPage1.xaml添加两个按钮,都是跳转到MainPage3但是传的参数不一样:

[html] view plaincopy
  1. <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
  2. <Button Content="Go to Page3-1" HorizontalAlignment="Left" Margin="200,100,0,0"
  3. VerticalAlignment="Top" Click="Button_Click_1"/>
  4. <Button Content="Go to Page3-2" HorizontalAlignment="Left" Margin="200,200,0,0"
  5. VerticalAlignment="Top" Click="Button_Click_2"/>
  6. </Grid>

页面效果如图:

双击第一个按钮,将其中代码改成:

[csharp] view plaincopy
  1. private void Button_Click_1(object sender, RoutedEventArgs e)
  2. {
  3. Frame.Navigate(typeof(MainPage3),"请叫我汪海");
  4. }

双击第二个按钮,将其中代码改成:

[csharp] view plaincopy
  1. private void Button_Click_2(object sender, RoutedEventArgs e)
  2. {
  3. Frame.Navigate(typeof(MainPage3), "请还是叫我汪海");
  4. }

这样我们就给Page3传了不同的参数。

那么接下来我们在Page3的OnNavigatedTo接受相应的数据。

先把返回的按钮赋值Name="btn",然后我们把接受到的数据显示在btn上面:

[csharp] view plaincopy
  1. protected override void OnNavigatedTo(NavigationEventArgs e)
  2. {
  3. //e.Parameter代表传来的参数
  4. btn.Content = e.Parameter;
  5. }

此时运行项目,就可以看见跳转后的页面显示传参的内容了:

下面来看一下如何使用导航栏的缓存功能。

在Page1上放置两个文本框和一个按钮来改变第二个文本框的值:

[html] view plaincopy
  1. <TextBox HorizontalAlignment="Center" VerticalAlignment="Center" Margin="-800,0,0,0" TextWrapping="Wrap"
  2. Text="" />
  3. <TextBox x:Name="text2" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="-800,100,0,0" TextWrapping="Wrap"
  4. Text="TextBox" />
  5. <Button HorizontalAlignment="Center" Content="Change!" VerticalAlignment="Center" Margin="-800,200,0,0"></Button>

双击按钮添加方法:

[csharp] view plaincopy
  1. private void Button_Click_3(object sender, RoutedEventArgs e)
  2. {
  3. text2.Text = "Hello,why!";
  4. }

运行项目,点击按钮,发现文本框的内容改成了Hello,why!但是如果跳转到Page3再返回就会发现原本的内容又不见了。

如果想保留里面的内容,就要启用缓存。

在构造方法中添加以下代码:

[csharp] view plaincopy
  1. public MainPage1()
  2. {
  3. this.InitializeComponent();
  4. NavigationCacheMode = NavigationCacheMode.Enabled;
  5. }

这样就可以保留相关的信息了。

接下来再看一看导航模式。

OnNavigatedTo在刚进来或者从其他页面里面返回过来的时候都可以调用。

一共有Back,Forward,New,Refresh四种情况,一般在New的时候才重新加载数据:

[csharp] view plaincopy
  1. protected override void OnNavigatedTo(NavigationEventArgs e)
  2. {
  3. if (e.NavigationMode == NavigationMode.New)
  4. {
  5. //第一次进入这个页面,此时才加载数据。
  6. }
  7. }

还有两个方法:

1.OnNavigatedFrom:当页面不再是活动页面时调用,

2.OnNavigatingFrom:在页面即将不是活动页面的。

页面导航的基础与深入相关推荐

  1. windows phone 页面导航(6)

    页面导航的例子我们使用的是两个页面,从第一个页面(MainPage)导航到第二个页面(SecondPage),然后可以从第二个页面导航到第一个页面 ,使用的os 7.1: 页面导航没有引入新的命名空间 ...

  2. 做淘宝页面前的基础准备

    做淘宝页面前的基础准备 文章目录 做淘宝页面前的基础准备 浏览器的默认加载策略 元素嵌套规则 特殊元素(p标签和a标签) 基础补充 导航栏布局 文本元素 行级元素 实现导航栏左右浮动效果 实现图标加文 ...

  3. WPF MvvmLight简单实例(1) 页面导航

    原文:WPF MvvmLight简单实例(1) 页面导航 实现了那些功能,先看看截图: 操作描述: 在程序运行后,点击"Load"按钮,页面会加载PageOne,点击PageOne ...

  4. 页面导航的两种方式——声明式导航、编程式导航||vue-router编程式导航||router.push() 方法的参数规则

    页面导航的两种方式 vue-router编程式导航 编程式导航基本用法 <!DOCTYPE html> <html lang="en"><head&g ...

  5. 第二十四章:页面导航(五)

    导航变化 当您尝试使用ModalEnforcement和MvvmEnforcement程序时,您可能会对模态页面未能保留任何信息感到不安.我们都遇到了导航到用于输入信息的页面的程序和网站,但是当您离开 ...

  6. 页面性能的基础因素 - 《Designing for Performance》

    页面性能的基础因素 最近读这本小书Designing for Performance,突然想到之前一篇网络性能评价只写了一半,在这里也里也算一个做个补充. 考虑页面性能可以从两种场景,第一个场景也是因 ...

  7. 北斗导航 | 卫星导航基础知识(卫星轨道及卫星在轨运动)

    ================================================ 博主github:https://github.com/MichaelBeechan 博主CSDN:h ...

  8. windows phone 学习之页面导航和数据传递

    创建一个windows phone 应用程序,在xaml文件里添加三个按钮和三个textblock,添加一个windows phone 页面(命名为SecondPage),同样也是添加三个按钮和三个t ...

  9. WindowsPhone 7 页面导航和虚拟路径、导航传值

    一.Phone 7的导航方式分为Xaml页面导航和后台代码导航. 1.Xaml页面导航: 注意NavigateUri是控件属性,故没有此属性的控件只能通过后台代码导航.如:Button控件. 2.后台 ...

最新文章

  1. Android Permission(授权)大全
  2. linux tar命令 打包 解压
  3. 三轴加速度传感器和六轴惯性传感器_美泰产品推介MSV3100A三轴加速度传感器
  4. 三年Java开发,尚学堂java马士兵全套
  5. linux 查看path文件,linux入门之环境变量与文件查找
  6. python特点 可移植性_下面的选项中,不属于Python特点的是( )_学小易找答案
  7. 【ML】PAC learning model
  8. 关于RGB888和RGB565互转代码实现方案推荐
  9. 高清视频格式-BD-remux、BD-RE、BDRip的区别
  10. 全球及中国缓控释肥行业产能规模与投资盈利能力分析报告2022版
  11. 大M法的介绍以及建模过程中if else的实现
  12. 【计算机视觉】神经网络推理训练
  13. 对比两张excel的不同
  14. 认知升级|系列1|富人思维
  15. 60英寸的电视长宽是多少
  16. 计算机作业我家乡的变化英语作文,我家乡的变化英语作文(精选12篇)
  17. mysql 删除的三种方法_mysql 删除表数据的三种方法
  18. 贯珠者说—一切荣誉归老板
  19. Spark官方文档整理:spark-core
  20. selenium 下拉框失焦定位

热门文章

  1. 【RecyclerView】 八、RecyclerView.ItemDecoration 条目装饰 ( onDraw 和 onDrawOver 绘制要点 )
  2. 【约束布局】ConstraintLayout 屏障 Barrier 约束 ( 简介 | 屏障适用场景 | 位置说明 | 相关属性 | 可视化操作 | 代码示例 | 总结 )
  3. 【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态
  4. Vue状态管理之Vuex
  5. java学习之静态内部类
  6. BZOJ3238: [Ahoi2013]差异
  7. IDE安装Lombok插件提高开发效率
  8. zend studio中ctrl+鼠标左键无法转到类或函数定义文件的解决方法
  9. win7 无法复制粘贴
  10. VS.NET 2005 SP1 安装注意