使用Frame控件设计Silverlight的导航
这里所说的导航其实就是在Silverlight的页面之间前进后退以及跳转。通过Frame控件配合后台NavigationService类可以很容易的做到页面之间的导航。

这就是工具箱中的Frame控件了,就把它当作一个控件用就行了,将其拖放到设计视图中,大小任意。如果想将整个应用程序的显示空间全部用于Frame内容的显示,那就铺满整个区域。如果只是想一部分作为显示跳转,那么可以将其大小位置根据需要进行设置。比如可以在Frame外面加上一些前进后退主页地址之类的,模仿浏览器的功能。

这里就将整体页面分为两个部分,顶部是一个小导航栏,剩下的部分全部由Frame控件占满。

对于Frame导航来说,一般需要使用Page,这样才可以在Page上与NavigationService进行交互,达到可以在Page内控制导航的功能。
为了演示,这里就新建了三个页面:Page1.xaml、Page2.xaml、Page3.xaml。
Frame所在页面的XAML代码如下:
<Grid x:Name="LayoutRoot">
<navigation:Frame x:Name="frame_main" Source="/Page1.xaml" Margin="0,37,0,0" Navigated="frame_main_Navigated" BorderBrush="Black" BorderThickness="0,2,0,0" />
<Button x:Name="btn_goBack" Content="后退" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="75" Click="btn_goBack_Click"/>
<Button x:Name="btn_goForward" Content="前进" HorizontalAlignment="Left" Margin="90,10,0,0" VerticalAlignment="Top" Width="75" Click="btn_goForward_Click"/>
<TextBox x:Name="tb_address" HorizontalAlignment="Left" Height="23" Margin="170,9,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="380"/>
<Button x:Name="btn_go" Content="跳转" HorizontalAlignment="Left" Margin="555,10,0,0" VerticalAlignment="Top" Width="75" Click="btn_go_Click"/>
</Grid>
设置Frame控件的Source属性来设置其初始显示的页面,这里就是Page1了。如果页面在项目中的子文件夹下,则写相应路径即可。

为了演示不同路径下的显示,这里就将Page2和Page3放到SubPages文件夹中。
那么在导航的时候,Page2的相对地址就是:/SubPages/Page2.xaml
一、在Frame所在页,通过调用Frame控件上的方法,可以对其内容进行导航控制。
比如跳转按钮,btn_go_Click方法内容如下:
frame_main.Navigate(new Uri(tb_address.Text, UriKind.RelativeOrAbsolute));
通过获取输入的地址,调用Frame控件的Navigate方法,传入Uri对象进行跳转。
比如前进/后退按钮,btn_goForward_Click、btn_goBack_Click方法内容如下:
private void btn_goForward_Click(object sender, RoutedEventArgs e)
{
if (frame_main.CanGoForward)
{
frame_main.GoForward();
}
}
private void btn_goBack_Click(object sender, RoutedEventArgs e)
{
if (frame_main.CanGoBack)
{
frame_main.GoBack();
}
}
通过判断CanGoForward和CanGoBack来判断框架内页面是否可以前进后退(就是有历史记录大概意思,不然刚打开也没地方后退,也没地方前进),然后调用Frame控件的GoForward、GoBack方法来达到前进后退的效果。
地址栏中的地址在Frame控件的Navigated时间中更新:
private void frame_main_Navigated(object sender, NavigationEventArgs e)
{
tb_address.Text = frame_main.Source.ToString();
}
通过Frame控件的Source属性得到当前框架内显示页的地址。
二、Frame控件内部显示页对框架的导航操作
其实这跟上面的操作方法基本一致,只是在内部页面不能获取也不需要获取Frame控件,而是直接使用NavigationService来进行框架导航的操作。
比如跳转到Page2则变成:
NavigationService.Navigate(new Uri("/SubPages/Page2.xaml", UriKind.Relative));
而前进/后退同样是在NavigationService上调用:
if (NavigationService.CanGoForward)
{
NavigationService.GoForward();
}
if (NavigationService.CanGoBack)
{
NavigationService.GoBack();
}
同样可以通过Source属性获取当前框架显示内容的URI地址。
NavigationService.Source;
注:NavigationService只能在继承了Page类的页面类中使用,所以在其他比如用户控件UserControl是调用不到的。

使用Frame控件设计Silverlight的导航的更多相关文章
- MVVMLight 实现指定Frame控件的导航
原文:MVVMLight 实现指定Frame控件的导航 在UWP开发中,利用汉堡菜单实现导航是常见的方法.汉堡菜单导航一般都需要新建一个Frame控件,并对其进行导航,但是在MvvmLight框架默认 ...
- 基于WPF系统框架设计(10)-分页控件设计
背景 最近要求项目组成员开发一个通用的分页组件,要求是这个组件简单易用,通用性,兼容现有框架MVVM模式,可是最后给我提交的成果勉强能够用,却欠少灵活性和框架兼容性. 设计的基本思想 传入数据源,总页 ...
- wpf控件设计时支持(3)
原文:wpf控件设计时支持(3) wpf设计时调试 编辑模型 装饰器 1.wpf设计时调试 为了更好的了解wpf设计时框架,那么调试则非常重要,通过以下配置可以调试控件的设计时代码 (1)将启动项目配 ...
- wpf控件设计时支持(1)
原文:wpf控件设计时支持(1) 这部分内容几乎是大家忽略的内容,我想还是来介绍一下. 本篇源码下载 1.属性元数据 在vs IDE中,在asp.net,winfrom等开发环境下,右侧的Proper ...
- wpf控件设计时支持(2)
原文:wpf控件设计时支持(2) 这篇介绍在wpf设计时集合项属性添加项的定义和自定义控件右键菜单的方法 集合项属性设计时支持 1.为集合属性设计器识别具体项类型 wpf设计器允许定义集合项的类型,如 ...
- .Net语言 APP开发平台——Smobiler学习日志:用Gridview控件设计较复杂的表单
最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的”Smobil ...
- Winform开发常用控件之TreeView菜单导航和权限用法
TreeView一个很棒的控件,我们在做WEB开发时常常犯困的一个东东.当然这里介绍winform里面的用法唠. 先介绍几个属性吧,CheckBoxes设置为true的话树形节点前面会出现checkb ...
- 基于Extjs的web表单设计器 第二节——表单控件设计
这一节介绍表单设计器的常用控件的设计. 在前面两章节的附图中我已经给出了表单控件的两大分类:区域控件.常用控件.这里对每个分类以及分类所包含的控件的作用进行一一的介绍,因为它们很重要,是表单设计器的基 ...
- 【React Native开发】React Native控件之DrawerLayoutAndroid抽屉导航切换组件解说(13)
),请不要反复加群! 欢迎各位大牛,React Native技术爱好者增加交流!同一时候博客左側欢迎微信扫描关注订阅号,移动技术干货,精彩文章技术推送! 该DrawerLayoutAndroid组件封 ...
随机推荐
- 【Canvas】动态正17边光阑 向高斯致敬
[背景知识] 公元前三世纪,欧几里得在<几何原本>中记载了正方形,正五边形,正六边形的做法,后来人们也掌握了正十五边形作图,但之后两千多年,人们没有在更高阶边形上取得突破. 1796年,1 ...
- 破解无线网络密码-BT3如何使用1
一分钟制作 BT3 U盘版 方便,快捷简单 光盘版BT3, 大概694MB,直接刻盘,然后用光盘引导,即可进入bt3,连接为: http://ftp.heanet.ie/mirrors/backtra ...
- PHP MySQL -处理语句
PHP MySQL 预处理语句 预处理语句对于防止 MySQL 注入是非常有用的. 预处理语句及绑定参数 预处理语句用于执行多个相同的 SQL 语句,并且执行效率更高. 预处理语句的工作原理如下: 预 ...
- 本地文件夹变远程仓库并且提交Github
//初始化本地仓库 $ git init Initialized empty Git repository in C:/Users/root/Desktop/vue-music/.git/ root@ ...
- IO习题
1.Java实现将九九乘法表输入到文本文件 public class Test1 { public static void main(String[] args) throws FileNotFoun ...
- MongoDB和关系型数据库简单对比
MongoDB 是一个跨平台的,面向文档的数据库,提供高性能,高可用性和可扩展性方便. MongoDB 工作在收集和文件的概念. 数据库:数据库是一个物理容器集合.每个数据库都有自己的一套文件系统上的 ...
- OpenERP7.0中日期的问题
在OpenERP7.0中载入中文语言后,输入某些单据,一些细化到时间的字段输入时会报错,说是日期格式不正确. 解决办法是进入[设置]-[翻译]-[语言]菜单,把时间格式中的值 %I:%M:%S %p ...
- SettingsMyEclipse
迁移时间--2017年5月20日10:39:42 Author:Marydon-----------------------------------MyEclipse单独设置项---------- ...
- 微信小程序--搜索关键词高亮
代码地址如下:http://www.demodashi.com/demo/14249.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...
- 零基础学软件测试V2.0
关于本教程 本系列是在之前的基础上进行了修改更新,原来的内容显得过于简单,但都是重点,这次对于过于简单部分增加了更详细的内容. 目前国内越来越重视软件测试,人才的缺口也是比较大的,为了帮助大家快速的学 ...