当前位置:首页 > 谈天说地

WPF中的导航框架概述

34资源网2022-06-25511

有的时候,我们需要一个支持页面跳转的ui,例如文件浏览器,开始向导等。对于这样的界面,简单的可以使用contentcontrol + contenttemplateselector的方式来实现,但是有的时候我们会需要一些更加高级的跳转功能,如前进,回退等。这个时候,用这个方式就稍微有点力不从心了,此时,我们可以使用wpf的导航框架帮助我们快速实现这一功能。

wpf 的page框架主要包括两个部分,容器和页面,

下面就以一个简单的例子来介绍wpf的page框架,首先我们创建第一个页面:

<page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      title="page1">
    <textblock>
        <run>### this is page 1, let's go to</run>
        <hyperlink navigateuri="page2.xaml" >page2</hyperlink>
    </textblock>
</page>

然后再创建第二个页面,

<page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      title="page2">
    <textblock>
        <run>~~~ this is page 2, let's go to</run>
        <hyperlink command="browseback" >page1</hyperlink>
    </textblock>
</page>

最后我们在容器中承载它们,在wpf中,page的容器可以是 window、navigationwindow、frame或浏览器等,大多数的时候用的是frame和navigationwindow,因为它提供了一系列导航相关的函数,其中frame更为灵活,这里就以frame为例来介绍它的用法:

<grid>
    <frame x:name="frame" source="page1.xaml"  navigationuivisibility="visible" />
</grid>

运行上述代码后,会得到在如下两个页面间跳转的导航窗口。点击page1的链接可以跳转到page2, 点击page2的链接可以回退到page1

页面地址:

在wpf的导航框架中,页面地址都是用uri来表示的,并不需要手动创建page对象(也是可以手动创建的),例如frame中设置的source="page1.xaml",它将起始页面的uri设置为page.xaml,系统会自动创建page1对象。

页面跳转:

页面跳转是通过navigationservice来控制的,在frame和page中都有该名为navigationservice的对象,可以通过它的navigate函数来实现页面跳转。例如前面在frame中设置source="page1.xaml"实际上就是通过如下函数实现的跳转:

frame.navigationservice.navigate(new uri("page1.xaml", urikind.relative));

这个函数并不仅仅局限于uri,跳转对象也不仅仅局限于uri,如下方式也都是可以的。

    frame.navigationservice.navigate(new page1());

    frame.navigationservice.navigate(new button());

    frame.navigationservice.navigate("hello world");

另外,我们也可以像page1.xaml种那样通过hyperlink的navigateuri属性来在page的xaml中实现页面跳转,当然,其本质也是调用navigationservice.navigate来实现的。

导航命令:

除了页面跳转外,navigationservice还提供了一些基本的导航命令,如前进,回退,刷新。可以通过

    frame.navigationservice.goforward();

    frame.navigationservice.goback();

    frame.navigationservice.refresh();

另外,wpf本身提供了一个标准的导航命令的集合navigationcommands(比navigationservice),page和frame也支持这几个命令的绑定(navigationcommands的命令是比navigationservice能支持的要多的),因此我们可以使用命令行绑定非常方便的调用这些功能。如page2种所使用的回退命令:

<hyperlink command="browseback" >page1</hyperlink>

 最后,简单的介绍一个没有什么技术含量,但很常用的功能,那就是frame对象的导航工具条的重绘。 frame对象本身是带着一个导航工具条的,提供了一个类似ie的前进后退功能。将navigationuivisibility设置为visible或auto的时候可见。

但这个工具条过于简陋,调试一下还可以,在最终交付的时候要么隐藏它,要么重写它,重写的方式一般就是改写其template,如下就是一个简单的例子:

<controltemplate targettype="frame">
    <dockpanel margin="8">
        <stackpanel margin="4" dockpanel.dock="top" orientation="horizontal">
            <button content="go back" margin="4"  command="{x:static navigationcommands.browseback}" />
            <button content="go forward" margin="4"  command="{x:static navigationcommands.browseforward}" />
        </stackpanel>
        <border borderbrush="orange"  margin="7"  borderthickness="4"  padding="7"
                cornerradius="7" background="white">
            <contentpresenter />
        </border>
    </dockpanel>
</controltemplate>

但这个常常用到,以便后续参考。

小结:

本文主要介绍了wpf的导航框架的基本用法,更多的功能后面再写文章陆续介绍。或者参看微软官方的msdn:导航概述

到此这篇关于wpf导航框架的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持萬仟网。

看完文章,还可以扫描下面的二维码下载快手极速版领4元红包

快手极速版二维码

快手极速版新人见面礼

除了扫码领红包之外,大家还可以在快手极速版做签到,看视频,做任务,参与抽奖,邀请好友赚钱)。

邀请两个好友奖最高196元,如下图所示:

快手极速版邀请好友奖励

扫描二维码推送至手机访问。

版权声明:本文由34楼发布,如需转载请注明出处。

本文链接:https://www.34l.com/post/18000.html

分享给朋友:

相关文章

互联网公司好日子到头,逻辑彻底变了

互联网公司好日子到头,逻辑彻底变了

好日子到头了,逻辑彻底变了,互联网公司已经不再是香饽饽。有两个重要的信号。…

koko卡卡拖地机器人家用全自动擦地机推荐

koko卡卡拖地机器人家用全自动擦地机推荐

koko卡卡智能拖地机是东莞市宝联电子科技有限公司旗下产品,隶属于香港概念数码科技有限公司,其主要研发机器人吸尘器等高科技领域家居产品,想知道卡卡智能拖地机好用吗,看看下面是网友使用koko卡卡智能拖地机的相关介绍,希望对大家有所帮助。1、…

购买须知模板怎么编辑(淘宝买家须知免费素材)

购买须知模板怎么编辑(淘宝买家须知免费素材)

为了帮助您入门,在您注册 Shopify 帐户时,后台的模版页面中会设置一个默认模版。如果您想为在线商店自定义一个不同的模版,则需要向后台添加一个模版。 您可通过以下几种方式添加模版: 如果您的计算机上的 .zip 文件中已有一个模版,那么…

虚拟内存太低怎么设置(电脑磁盘空间不足清理步骤)

虚拟内存太低怎么设置(电脑磁盘空间不足清理步骤)

在电脑的平时使用中,经常会出现内存不足的提示,有时可能小伙伴们会疑惑了,明明自己是16G内存的性能为何也能出现这种提示呢?这是当你在运行多个大程序的时候,对内存的需求非常大,当物理内存不能满足需求时,有可能导致程序关闭而数据保存错误。那么在…

已覆盖70%前十大快递/快运客户,商用车后市场玩家「大车队长」眼中的轮胎“生命力”

已覆盖70%前十大快递/快运客户,商用车后市场玩家「大车队长」眼中的轮胎“生命力”

2020年,商用车后市场头部创业公司「大车队长」正式完成了数千万元人民币A轮融资,由经纬中国领投。融资后的一年里,大车队长成长迅速,还发布了全新的“5113”战略,即5年服务100万台车、1000万个轮位、完成300亿元营收。 截至目前,大…