WPF导航总结
使用导航的目的是从一个页面进入到另一个页面。无论是预先决定的线性顺序(向导)还是基于层次的用户驱动程序(大部分网站的形式),或者动态生成的路径,主要有3种方法实现:调用Navigate方法,使用Hyperlinks,使用导航日志。
Navigate方法:
导航容器支持Navigate方法,它允许改变当前页,可以用目标页的示例:
1 NavigateDemoPage nd=new NavigateDemoPage();
2 this.NavigationService.Navigate(nd);
1 NavigateDemoPage nd=new NavigateDemoPage();
2 this.NavigationService.Navigate(nd);
或者一个指向目标页的URI来调用Navigate:
this.NavigationService.Navigate(new Uri("NavigateDemoPage.xaml",UriKind.Relative));
this.NavigationService.Navigate(new Uri("NavigateDemoPage.xaml",UriKind.Relative));
由URI指定的Page可以是松散的xaml文件,也可以是编译后的资源,但xaml文件的根元素必须是page。如果想导航到一张html页,则必须使用能够接受一个URI参数的Navigate重载,例如:
this.NavigationService.Navigate(new Uri("http://www.microsoft.com"));
导航容器同样有两个属性,它们与Navigate的两个重载方法相同,能够通过设置Content属性导航至一个Page实例:
this.NavigationService.Content=NavigateDemoPage;
this.NavigationService.Content=NavigateDemoPage;
也能设置Source属性为一个URI来进行导航:
this.NavigationService.Source=new Uri("NavigateDemoPage",UriKind.Relative);
this.NavigationService.Source=new Uri("NavigateDemoPage",UriKind.Relative);
除了能以声明的方式设置这两个属性外,没有其他理由来用这两个属性替代Navigate方法了!
使用Hyperlink(超链接):
这种行为类似于html中的超链接,它使你能够在TextBlock内嵌入Hyperlink元素,内容将会自动呈现为可被点击的超链接形式,目标页通过Hyperlink中的NavigateUri属性指定,类似于html中的href:
<TextBlock>
Click <Hyperlink NavigateUri="NavigateDemoPage.xaml">here</Hyperlink>here to view more information.
</TextBlock>
<TextBlock>
Click <Hyperlink NavigateUri="NavigateDemoPage.xaml">here</Hyperlink>here to view more information.
</TextBlock>
这么做的目的仅仅是为了提供更为简单的html风格的链接,当然,链接的目标页已经预先知晓。
Hyperlink可以支持更为复杂的功能,与html中的超链接相似,例如,在多个frame的情况下导航至某个frame,可以把Hyperlink的TargetName属性设置为目标frame的名字。为了能够导航到Page的某个小节,可以在URI后面添加一个#号以及一个名字,这个名字表示目标页上任何元素的名字。
使用导航日志:
每一个导航容器包含了记录导航历史信息的导航日志,这和web浏览器很像。导航日志提供了后退与前进的逻辑,它在内部维护了两个栈,后退栈和前进栈,用户可以自己初始化后退与前进的动作,也可以通过编程的方法调用导航容器的GoBack和GoForward方法。
NavigationWindow总有一个导航日志,但是Frame可能没有自己的导航日志,这需要取决于JournalOwnership的属性值。
类似web浏览器风格的后退和前进动作是由导航日志控制的,但是怎么实现停止与刷新按钮呢?
在任何时候如果想停止一个正在处理的导航操作,可以调用导航容器的StopLoading方法,如果想刷新页面,可以调用导航容器中的Refresh方法,它是没有参数的。
通过设置Page的RemoveFromJournal属性为true可以去除导航日志。
导航事件:
无论导航是否使用Navigate、Hyperlinks或导航日志,它总是以异步方式执行的。许多事件在导航过程中被触发,它们允许你显示富UI,甚至允许你取消导航。
在Navigated被触发之前,NavigationProgress会被周期性触发,这里没有呈现的一个事件为NavigationStopped,如果导航被取消或者有错误发生时,这个事件会被触发,而不是LoadCompleted事件。
注意:当从一页HTML导航至另一页HTML时,导航事件不会被触发!
WPF导航总结的更多相关文章
- 笔记08 WPF导航
如何在winform中做导航,如何重定向界面,就产生了争执. 是用window还是Page还是UserControl? 先不管用啥.我们先比较一下各自的优缺点. 在WPF中使用导航,内容被组织在Pag ...
- WPF Navigation导航
WPF导航这个话题,网上的解决方法有很多种,有点吃猪脚的感觉,弃之可惜,食之乏味. 不过还是简单聊聊吧. 常见的导航: 利用HyperLink导航,可以到某一个Page页面,也可以是外部链接,当然也可 ...
- WPF学习之路(八)页面
传统的应用程序中有两类应用程序模式:桌面应用,Web应用.WPF的导航应用程序模糊了这两类应用程序的界限的第三类应用程序 WPF导航表现为两种形式,一是将导航内容寄宿于窗口,二是XAML浏览器应用程序 ...
- WPF Navigation
在开始学习WPF时,一开始对WPF的Window, Page, UserControl感到很迷惑.不知道什么时候该使用哪一个.下面简单介绍一下这三者的区别. Window:故名思意,桌面程序的窗体.在 ...
- Prism 4 文档 ---第8章 导航
作为同用户具有丰富的交互的客户端应用程序,它的用户界面(UI)将会持续不断的更新来反映用户工作的当前的任务和数据.用户界面可以进行一段时间相当大的变化作为用户交互的应用程序中完成各种任务.通过 ...
- 22 WPF列表,树,网格
ListView ListView从ListBox派生,只增加了View属性.如果你没有设置View属性,ListView行为正如ListBox. 从技术上,View属性指向任何ViewBase派生类 ...
- .NET Core 3 WPF MVVM框架 Prism系列之导航系统
本文将介绍如何在.NET Core3环境下使用MVVM框架Prism基于区域Region的导航系统 在讲解Prism导航系统之前,我们先来看看一个例子,我在之前的demo项目创建一个登录界面: 我们看 ...
- WPF简单导航框架(Window与Page互相调用)
相当多的WPF程序都有着丰富的页面和功能,如何使程序在不同页面间转换并降低资源占用,选择适合自己的导航框架就很重要了.最近花了一点时间做了一个简单的导航框架,并在这个过程中对Window.Page.U ...
- WPF如何实现一个漂亮的页签导航UI
最近看到一个比较漂亮的UI主界面,该UI是用左边的页签进行导航,比较有特色,就想着尝试用WPF来实现一下.经过一番尝试,基本上将UI设计图的效果用WPF程序进行了实现.下面介绍一下主要的思路: 1 U ...
随机推荐
- Listener 监听Session内的对象
Listener用于监控Session内的对象,分别是HttpSessionBindingListener与HttpSessionActivationListener.它们的触发时机分别为: Http ...
- windows 中 到底是用的哪个java.exe??? 删除了PATH变量的Java设置还是可以运行java.exe windows/system32
到底是用的哪个java.exe??? 删除了PATH变量的Java设置还是可以运行java.exe JavaWindowsCC++C# 当电脑里面有多个jdk或是jre时,在cmd里面到底是用的哪个 ...
- OC与AS3的观察者模式比较以及外部回调
一.要点 1.AS3的观察者模式,主要是体现在在哪个组件上监听,那么就在这个组件上分发事件,并且可以直接传递Function. 2.OC的观察者模式,主要是需要你指定观察的对象,和观察的对象方法sel ...
- React Native布局
一款好的APP离不了一个漂亮的布局,本文章将向大家分享React Native中的布局方式FlexBox. 在React Native中布局采用的是FleBox(弹性框)进行布局. FlexBox提供 ...
- R语言如何将字符串转变为命令执行
这里用到 eval() 和 parse() 函数.首先使用 parse() 函数将字符串转化为表达式(expression),而后使用 eval() 函数对表达式求解.x <- 1:10a &l ...
- TCP/IP,http,socket,长连接,短连接——小结(转)
概要: 之前对这几个概念有点糊涂,查阅了些资料,稍微概括下他们的区别吧.如有错误,请拍~~~ 先看图: TCP/IP是什么? TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在 ...
- Java如何使用线程解决生产者消费者问题?
在Java编程中,如何使用线程解决生产者消费者问题? 以下示例演示如何使用线程解决生产者消费者问题. package com.yiibai; public class ProducerConsumer ...
- e617. Determining the Opposite Component of a Focus Event
The opposite component is the other component affected in a focus event. Specifically, in a focus-lo ...
- Lemon OA第4篇:常用功能
OA,Office Automation的简写,中文意思办公自动化,不同的人有不同的见解,可以简单的理解为网络化办公,高效.协同是其显著的特点,如今正在朝着智能的方向发展 平时不擅长文字,写出来几句话 ...
- 工作所用的日常 Git 命令
几乎每个开发人员都在使用 Git,当然很可能是 GitHub.但大多数开发者大概有 99% 的时间只是使用这三个命令: #使用命令git add <file>,将文件添加到暂存区 git ...