当前位置:首页 > Windows程序 > 正文

WPF,Silverlight与XAML读书笔记第十五

2021-05-24 Windows程序

?说明:本系列基本上是《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