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

WPF中的导航框架概述

34资源网2022-06-25407

有的时候,我们需要一个支持页面跳转的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

分享给朋友:

相关文章

络绎不绝怎么造句?教你用络绎不绝造句

络绎不绝怎么造句?教你用络绎不绝造句

很多人不知道络绎不绝怎么造句?其实用络绎不绝造句有很多的,下面小编整理了29句用络绎不绝造句的句子,希望对大家有借鉴的作用。…

最傻的六种员工离职理由,希望你不是其中一员

最傻的六种员工离职理由,希望你不是其中一员

春节后,今年的中国员工离职率应该是最低的。但是职场上,还是会有很多员工提离职。离职原因各种各样, 不开心,不舒服,工资少,学不到东西等等。那么,最傻的六种员工离职是哪些呢?…

g系列cpu性能排行(英特尔u系列和g系列)

g系列cpu性能排行(英特尔u系列和g系列)

去年10月,AMD正式发布Zen 3架构锐龙5000系列处理器,单线程和多线程性能实现“质”的飞跃,反超当时的10代酷睿处理器,与后来发布的11代酷睿处理器相比,也丝毫不落于下风。 在这样的大前提下,AMD于4月发布了Zen 3架构锐龙5…

首页页眉怎么去掉横线(教你三招快速处理)

首页页眉怎么去掉横线(教你三招快速处理)

Word可以说是office里算简单的了,不管是谁都能比较好的使用Word,但是要用好Word也不是那么容易的。所以今天介绍的这几个Word小技巧也是十分实用的,快来学起来吧! 字符加圈圈 一 很多时候,我们在编号的时候总会用到这个带圈字…

普通发票验证真伪查询(全国统一发票查询平台)

普通发票验证真伪查询(全国统一发票查询平台)

发票是财务工作中必不可少的一环,无论开具还是接收,都需要财务人谨慎小心、仔细核对。作为财务人员或者审核报销人员,发票真伪查询几乎是每天必不可少的工作,今天跟朋友分享怎么在线查验发票真假。 财务朋友们可以登录“全国增值税发票查验平台”,输入发…

美国反对英伟达收购芯片IP巨头Arm(业界担心损害竞争和中立性)

美国时间12月2日,美国联邦贸易委员会(FTC)发表声明称,将对英伟达收购ARM提起行政诉讼,阻止此番史上最大规模的半导体行业收购案。 对此,英伟达回应称,将继续展示收购ARM这笔交易的好处,“我们将继续努力证明这项交易将有利于行业并促进竞…