页面导航的基础与深入
Windows8中是没有对话框的概念的,不同的界面有不同的页面,类似于网页一样的浏览模式。
通过Frame.Navigate(typeof(TestPage),obj)的方式来实现不同页面的导航。
NavigationServer的属性方法有:
GoBack()后退,GoForward()前进,CanGoBack()判断是否可以后退。
页面导航默认是不启用缓存的,也就是后退之后的前一个页面恢复成原始的状态。
如果需要开启,在构造函数中可以使用以下代码:
- NavigationCacheMode = NavigationCacheMode.Enabled;
下面新建一个项目TestNavigation来说明导航栏的使用。
给项目添加两个空白页面MainPage1和MainPage2和MainPage3来进行测试:
在App.xaml.cs将启动页面设置为MainPage1(找到typeof,将MainPage改成MainPage1即可)。
在MainPage1添加一个按钮来跳转到Page3。
- <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
- <Button Content="Go to Page3" HorizontalAlignment="Left" Margin="200,100,0,0"
- VerticalAlignment="Top"/>
- </Grid>
双击该按钮,设置点击之后的方法:
- private void Button_Click_1(object sender, RoutedEventArgs e)
- {
- Frame.Navigate(typeof(MainPage3));
- }
这样运行项目,点击之后便会发现自动跳转到了对应的界面。
接下来,在MainPage3的页面上加一个后退按钮:
- <Button Content="Back" HorizontalAlignment="Left" VerticalAlignment="Top"/>
双击该按钮如下添加代码:
- private void Button_Click_1(object sender, RoutedEventArgs e)
- {
- Frame.GoBack();
- }
运行项目,则点击该按钮可以后退。
如此便实现了两个页面的导航,而这个Frame是Page类的一个属性。
那么怎么给页面传参呢?
其实Navigate方法还有一个重载方法:
- public bool Navigate(Type sourcePageType);
- public bool Navigate(Type sourcePageType, object parameter);
也就是说第二个参数传什么都可以,是一个object对象。
那么我们下面来做一个测试。
首先是在MainPage1.xaml添加两个按钮,都是跳转到MainPage3但是传的参数不一样:
- <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
- <Button Content="Go to Page3-1" HorizontalAlignment="Left" Margin="200,100,0,0"
- VerticalAlignment="Top" Click="Button_Click_1"/>
- <Button Content="Go to Page3-2" HorizontalAlignment="Left" Margin="200,200,0,0"
- VerticalAlignment="Top" Click="Button_Click_2"/>
- </Grid>
页面效果如图:
双击第一个按钮,将其中代码改成:
- private void Button_Click_1(object sender, RoutedEventArgs e)
- {
- Frame.Navigate(typeof(MainPage3),"请叫我汪海");
- }
双击第二个按钮,将其中代码改成:
- private void Button_Click_2(object sender, RoutedEventArgs e)
- {
- Frame.Navigate(typeof(MainPage3), "请还是叫我汪海");
- }
这样我们就给Page3传了不同的参数。
那么接下来我们在Page3的OnNavigatedTo接受相应的数据。
先把返回的按钮赋值Name="btn",然后我们把接受到的数据显示在btn上面:
- protected override void OnNavigatedTo(NavigationEventArgs e)
- {
- //e.Parameter代表传来的参数
- btn.Content = e.Parameter;
- }
此时运行项目,就可以看见跳转后的页面显示传参的内容了:
下面来看一下如何使用导航栏的缓存功能。
在Page1上放置两个文本框和一个按钮来改变第二个文本框的值:
- <TextBox HorizontalAlignment="Center" VerticalAlignment="Center" Margin="-800,0,0,0" TextWrapping="Wrap"
- Text="" />
- <TextBox x:Name="text2" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="-800,100,0,0" TextWrapping="Wrap"
- Text="TextBox" />
- <Button HorizontalAlignment="Center" Content="Change!" VerticalAlignment="Center" Margin="-800,200,0,0"></Button>
双击按钮添加方法:
- private void Button_Click_3(object sender, RoutedEventArgs e)
- {
- text2.Text = "Hello,why!";
- }
运行项目,点击按钮,发现文本框的内容改成了Hello,why!但是如果跳转到Page3再返回就会发现原本的内容又不见了。
如果想保留里面的内容,就要启用缓存。
在构造方法中添加以下代码:
- public MainPage1()
- {
- this.InitializeComponent();
- NavigationCacheMode = NavigationCacheMode.Enabled;
- }
这样就可以保留相关的信息了。
接下来再看一看导航模式。
OnNavigatedTo在刚进来或者从其他页面里面返回过来的时候都可以调用。
一共有Back,Forward,New,Refresh四种情况,一般在New的时候才重新加载数据:
- protected override void OnNavigatedTo(NavigationEventArgs e)
- {
- if (e.NavigationMode == NavigationMode.New)
- {
- //第一次进入这个页面,此时才加载数据。
- }
- }
还有两个方法:
1.OnNavigatedFrom:当页面不再是活动页面时调用,
2.OnNavigatingFrom:在页面即将不是活动页面的。
页面导航的基础与深入相关推荐
- windows phone 页面导航(6)
页面导航的例子我们使用的是两个页面,从第一个页面(MainPage)导航到第二个页面(SecondPage),然后可以从第二个页面导航到第一个页面 ,使用的os 7.1: 页面导航没有引入新的命名空间 ...
- 做淘宝页面前的基础准备
做淘宝页面前的基础准备 文章目录 做淘宝页面前的基础准备 浏览器的默认加载策略 元素嵌套规则 特殊元素(p标签和a标签) 基础补充 导航栏布局 文本元素 行级元素 实现导航栏左右浮动效果 实现图标加文 ...
- WPF MvvmLight简单实例(1) 页面导航
原文:WPF MvvmLight简单实例(1) 页面导航 实现了那些功能,先看看截图: 操作描述: 在程序运行后,点击"Load"按钮,页面会加载PageOne,点击PageOne ...
- 页面导航的两种方式——声明式导航、编程式导航||vue-router编程式导航||router.push() 方法的参数规则
页面导航的两种方式 vue-router编程式导航 编程式导航基本用法 <!DOCTYPE html> <html lang="en"><head&g ...
- 第二十四章:页面导航(五)
导航变化 当您尝试使用ModalEnforcement和MvvmEnforcement程序时,您可能会对模态页面未能保留任何信息感到不安.我们都遇到了导航到用于输入信息的页面的程序和网站,但是当您离开 ...
- 页面性能的基础因素 - 《Designing for Performance》
页面性能的基础因素 最近读这本小书Designing for Performance,突然想到之前一篇网络性能评价只写了一半,在这里也里也算一个做个补充. 考虑页面性能可以从两种场景,第一个场景也是因 ...
- 北斗导航 | 卫星导航基础知识(卫星轨道及卫星在轨运动)
================================================ 博主github:https://github.com/MichaelBeechan 博主CSDN:h ...
- windows phone 学习之页面导航和数据传递
创建一个windows phone 应用程序,在xaml文件里添加三个按钮和三个textblock,添加一个windows phone 页面(命名为SecondPage),同样也是添加三个按钮和三个t ...
- WindowsPhone 7 页面导航和虚拟路径、导航传值
一.Phone 7的导航方式分为Xaml页面导航和后台代码导航. 1.Xaml页面导航: 注意NavigateUri是控件属性,故没有此属性的控件只能通过后台代码导航.如:Button控件. 2.后台 ...
最新文章
- Android Permission(授权)大全
- linux tar命令 打包 解压
- 三轴加速度传感器和六轴惯性传感器_美泰产品推介MSV3100A三轴加速度传感器
- 三年Java开发,尚学堂java马士兵全套
- linux 查看path文件,linux入门之环境变量与文件查找
- python特点 可移植性_下面的选项中,不属于Python特点的是( )_学小易找答案
- 【ML】PAC learning model
- 关于RGB888和RGB565互转代码实现方案推荐
- 高清视频格式-BD-remux、BD-RE、BDRip的区别
- 全球及中国缓控释肥行业产能规模与投资盈利能力分析报告2022版
- 大M法的介绍以及建模过程中if else的实现
- 【计算机视觉】神经网络推理训练
- 对比两张excel的不同
- 认知升级|系列1|富人思维
- 60英寸的电视长宽是多少
- 计算机作业我家乡的变化英语作文,我家乡的变化英语作文(精选12篇)
- mysql 删除的三种方法_mysql 删除表数据的三种方法
- 贯珠者说—一切荣誉归老板
- Spark官方文档整理:spark-core
- selenium 下拉框失焦定位
热门文章
- 【RecyclerView】 八、RecyclerView.ItemDecoration 条目装饰 ( onDraw 和 onDrawOver 绘制要点 )
- 【约束布局】ConstraintLayout 屏障 Barrier 约束 ( 简介 | 屏障适用场景 | 位置说明 | 相关属性 | 可视化操作 | 代码示例 | 总结 )
- 【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态
- Vue状态管理之Vuex
- java学习之静态内部类
- BZOJ3238: [Ahoi2013]差异
- IDE安装Lombok插件提高开发效率
- zend studio中ctrl+鼠标左键无法转到类或函数定义文件的解决方法
- win7 无法复制粘贴
- VS.NET 2005 SP1 安装注意