WPF的页面导航

工作中之前接触过的WPF程序一直是使用TabControl作不同页面间的切换,每个Tab负责独立的功能,清晰简捷,所以一直就没有动力研究WPF自带的页面导航。(虽然接触过使用页面导航的WPF项目,也并没有去了解,而是似懂非懂地过去了。)

直到最近做的一个项目,用的还是TabControl,但在某个Tab里面,做的任务有些复杂,导致UI在操作前后会有很大的变化。很自然的想法就是在这个Tab中使用两个view(我并没有指明是UserControl还是Page),来回切换。然而粗略地调查了一下之后觉得实现起来有点麻烦,然后这个Tab也不是特别复杂,于是就硬着头皮使用了笨方法:把所有控件都画上去,后台的ViewModel用各种属性绑定控制各个控件的隐藏、显示、以及位置。

实现的效果很好,但终究是有些不踏实。于是最近趁着项目间歇,花时间看了一下WPF的页面导航,以下是学习总结。

1. WPF自带的页面导航

网上搜到了一篇WPF Navigation的博客,讲解地很到位。《WPF编程宝典》2010版的第24章内容差不多,也讲的很全面。

WPF的页面导航其实是微软在发明了Inductive User Interface 后引入的。据说用户往往觉得web应用要比桌面应用更好用,因此桌面应用着急了,就开始学web应用了。

WPF页面导航的几个关键组件:负责导航的NavigationService,可以导航的用户界面Page,以及最常用的导航容器Frame。在上文博客中还介绍了页面的生命周期,很有意思。还有更高级的PageFunction等等,很好很强大。再回头看看以前的那个使用导航的项目,觉得看懂了好多~

2. 不使用页面导航来实现页面跳转

然而有人表示不服。她是这样说的:“我一开始也被如何搞定页面导航弄糊涂了。不过,我坚信应该让ViewModel去做一切的工作,而View只是个漂亮的界面而已。我不想在界面上弄个按钮然后带段代码来切换页面。”

她想到了一个很漂亮的方案来实现页面跳转。分别在下面两个博客里。

第一篇博客说,你只需要在你的ViewModel里面加一个Property,叫CurrentView,然后根据情况为这个属性赋上不同的ViewModel。在主界面里,用一个ContentControl来绑定CurrentView。至于如何渲染界面,则采用DataTemplate!妙哉!

第二篇博客则补充了如何在application中加入一个ApplicationViewModel,来管理不同的ViewModel的切换。

最后她还推荐去看一下WPF的消息系统,如MVVM Light’s Messenger, 或 Microsoft Prism’s EventAggregator (to broadcast ChangePage commands from any ViewModel so you wouldn’t need to find the ApplicationViewModel to execute the ChangePageCommand, however that’s for another day

是啊,that‘s for another day... 改天吧~

时间: 2024-12-21 02:23:43

WPF的页面导航的相关文章

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

原文:WPF MvvmLight简单实例(1) 页面导航 实现了那些功能,先看看截图: 操作描述: 在程序运行后,点击“Load”按钮,页面会加载PageOne,点击PageOne页面中的“Next”按钮即可进入PageTwo页面, 点击PageTwo页面中的“Next”即可进入PageThree页面,点击Back可返回Page1页面 第一步:新建工程并使用NuGet安装MvvmLight 第二步:添加Views文件夹并添加相应的ViewModel 本文主要描述如何使用MvvmLight实现简单

[Aaronyang] 写给自己的WPF4.5 笔记17[Page实现页面导航]

1. 第一个Page页使用 新建PageDemo解决方案,默认wpf应用程序 右键项目新建页,然后指定App.xaml的默认启动窗口,为Page1.xaml,F5运行项目 2.关于NavigationWindow不推荐使用,所以不讲解了,创建对象,指定Content为一个Page页,然后Show() 3.Page类 讲解几个可能跟Window不一样的属性 ShowsNavigationUI="False" 不显示导航栏,默认显示 新建Window1.xaml窗口,放入Frame,去掉默

【REACT NATIVE 系列教程之五】NAVIGATOR(页面导航)的基本使用与传参

本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/react-native/2248.html 今天介绍一种应用开发中常用的负责页面切换及导航功能的组件:Navigator 一:Navigator 对于页面导航其实主要功能就是:每个页面都知道本身应该切换到哪个页面,并且切到的页面会记录从哪里来,如果要返回的话,知道返回到哪个页面.这一切都不需要再用逻辑管理!而且每个页面之间也可以进行参数传递,

【Win10】页面导航的实现

注:本文基于 Windows 10 10240 及其 SDK 编写,若以后有变化,请以新版本为准. 页面导航我们是再熟悉不过了,浏览器.手机 App 大多都使用这种方式来展示内容.在 Windows 10 应用商店应用当中,也是使用这种方式来展示内容.具体是通过 Frame 这个控件来进行导航展示. 在 App.xaml.cs 文件中,我们可以看到创建了一个 Frame: 并且在下面,使用 Navigate 方法导航到 App 的主页 MainPage. 导航到某个页面使用的就是 Navigat

响应式页面导航设计解析

有人说,2013将是响应式网页设计之年.自用户体验设计师Ethan Marcotte在2010年提出Responsive Web Design(RWD)的名词,即响应式网页设计,这个概念从Responsive Architecture延伸到web设计领域,让所有的交互设计.视觉.前端开发都开始投入到这个趋势,或者说新的设计解决方案中. 当自己和身边的朋友越来越多的用上了iPhone.iPad.android手机或平板,当越来越多的人都在谈论这个老意识新概念的话题,当我们一直秉承的用户体验第一与网

WinPhone学习笔记(一)——页面导航与页面相关

最近学一下Windows Phone(接下来简称“WinPhone”)的开发,在很久很久前稍探究一下WinPhone中对一些传感器的开发,那么现在就从头来学学WinPhone的开发.先从WinPhone的页面入手,在我印象中比较深刻的那番话:一台WinPhone设备就好比一个Web的浏览器,应用上每个界面就是一个网页,可以点击“后退”来返回之前的页面.这个类比我觉得相当的形象.这番话能引出WinPhone开发中一个比较常见的操作——页面导航,由这个页面导航还引出了别的方面的内容,如下面所示 那下

关于WPF自定义控件(导航)

1.在WPF中自定义控件(1)概述 2.在WPF中自定义控件(2) UserControl 3.在WPF中自定义控件(3) CustomControl (上) 4.在WPF中自定义控件(3) CustomControl (下) 关于WPF自定义控件(导航),布布扣,bubuko.com

微信卡券功能商户后台卡券货架、最新页面导航等五项优化

微信卡券最近又更新了,汲取苹果产品的精髓,势必将简单化进行到底.微信卡券商户后台近日发布卡券货架.最新页面导航等五项新优化.具体调整如下: 一. 类目及资质调整: 1. 取消[其它]类目 申请时,若无对应类目可选,即你所属的行业暂未开放,请留意平台后续通知. 2. 新增/修改类目: 新增:车票.船票.水电煤缴费.有线电视缴费.货运.综合电商 修改:话费——话费/流量/宽带 3. 部分类目资质调整: 保健食品.酒类.母婴用品.足疗按摩: 另外,家政服务.机票.钟表眼镜.普通食品.药房/药店.化妆品

小程序配置单个页面导航栏的属性(微信小程序交流群:604788754)

配置单个页面导航栏的属性: 就在所要配置页面相对应的json文件中写入以下想要设置的属性: { "navigationBarBackgroundColor": "#ffffff",    "navigationBarTextStyle": "black",    "navigationBarTitleText": "小程序" } 属性只需要放在大括号里面即可,每个属性用逗号隔开. 如果不