WPF,Silverlight与XAML读书笔记第十五
?说明:本系列基本上是《WPF揭秘》的读书笔记。在结构安排与文章内容上参照《WPF揭秘》的编排,对内容进行了总结并加入一些个人理解。
导航
有关导航的话题在介绍NavigationWindow与Page等元素时有提及。这篇文章将详细分析导航相关话题。同其它话题,针对WPF,Silverlight与WP 7,导航特性大致相似又有着些许不同。在介绍此特性时相同的特性将合在一起,每个框架独有的特性也将独立介绍并有明显标识。
导航的功能及目的就是从一个页面转向另一个页面,可能是前进亦或是后退/返回。以下几种实现导航的方法:
调用Navigate方法
使用Hyperlink
使用导航日志
调用Navigate方法
导航容器支持通过使用Navigate方法改变其中的内容页。Navigate方法有两个重载,分别接受目标页的实例或指向目标页的URI。另外提示,这两种重载分别有等效的属性设置的实现,这两个属性设置方式主要用于在Xaml中以声明方式设置这两个值,在代码中应使用Navigate的两个重载,在下面的代码示例中演示所有这些方式的C#代码实现:
//通过页面实例进行导航PhotoPage npage = new PhotoPage();
this.NavigationService.Navigate(npage);
//通过属性导航到页面实例
this.NavigationService.Content = npage;
//通过URI进行导航
this.NavigationService.Navigate(new Uri(“PhotoPage.xaml”,UriKind.Relative));
//通过属性导航到URI
this.NavigationService.Source = new Uri(“PhotoPage.xaml”,UriKind.Relative);
?
Uri指向的Page可以是一般的xaml文件,也可以是编译后的内容。必须的要求就是根元素为Page。如果要导航至一个Html页,需要使用Navigate接收Uri的重载,如;
this.NavigationService.Navigate(new Uri(“”));
使用Hyperlink
WPF中的Hyperlink与Html中的超链接非常相似,其提供了一种容易使用的导航方案。Hyperlink元素可以嵌在TextBlock元素中,会被自动呈现为可以被点击的超链接样式(就如Html中<a>标签被自动格式化那样)。Hyperlink通过NavigateUri属性指定导航的目标页(就如Html中<a>标签的href属性)。
提示:
类似Html的超链接可以通过使用Target属性指定目标页在哪个Frame中打开,WPF中的Hyperlink也可以通过TargetName属性指定目标页在那个Frame中打开,TargetName属性为Frame的名称。
另外WPF中Hyperlink也支持Html中锚点的效果,方式与Html也类似,即在Uri后面跟上一个#,并在后面接上Page中某个元素的名称,表示要导航到的部分。
如果要在导航的同时做一些样式等处理,可以给NavigateUri属性指定一个假的路径,并处理Click事件,在这个事件中完成样式设置并调用Navigate方法手工完成导航。
使用导航日志
导航日志是所有导航容器都记录的导航历史信息。Web浏览器也有这个特征。导航日志通过两个栈 – 前进栈与后退栈来提供后退与前进的功能。
这两个栈具体工作方式如下:
动 作 结 果 后退 把当前页推入前进栈,从后退栈弹出一个页,并导航至这个页 前进 把当前页推入后退栈,从前进栈弹出一个页,并导航至这个页 进入新页面 把当前页推入到后退栈,并把前进栈清空
要完成前进与后退动作,可以调用导航容器的GoBack和GoForward方法,注意,在调用到这两个方法之前需要先调用CanGoBack或CanGoForward来确保后退栈或前进栈不为空,从而确保这个导航行为正确无误的执行。
NavigationWindow总会保存导航日志,而Frame是否保存导航日志取决于其JournalOwnership属性值的设置,有如下几种设置:
OwnsJournal:Frame有自己的导航日志
UsesParentJournal:在父容器中保存导航日志,如果父容器不支持导航日志,则Frame也不会保存导航日志。
Automatic(默认值):当Frame寄宿于NavigationWindow或Frame,使用同UsesParentJournal的设置,否则使用同OwnsJournal的设置。
在Frame拥有导航日志的情况下,Frame中就会出现内置的导航按钮,当然可以通过将NavigationUIVisibility设为Hidden来隐藏这个导航按钮。
提示:
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/70294.html