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

WPF中的导航框架概述

34资源网2022-06-25388

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

分享给朋友:

相关文章

零成本创业项目,2020年就做这个最赚钱

零成本创业项目,2020年就做这个最赚钱

一场肺炎冠状病毒,让很多人没有了欲望,除了能活下去。曾经繁华的商业街,现在空无一人, 曾经热闹的小吃店,现在大门紧锁。那么,在这个时候还可以创业吗?当然是可以的。今天小编就给大家推荐一个适合零成本创业的项目,这个项目是玩手游赚钱。从现在开…

农村4个冷门暴利创业项目,适合农村创业的四个暴利项目分享

农村4个冷门暴利创业项目,适合农村创业的四个暴利项目分享

农村的发展给我们带来了很多商机,创业成了农村的新热潮,但是问题来了,很多人有创业的想法,但却没有一个好的创业项目。那么,今天34楼总结了几个冷门暴利创业项目,现在看来可能很冷门,但是,只要你打开市场,肯定很赚钱的。一、农家乐城市和农村各有各…

李开复的经典语录32句

李开复的经典语录32句

李开复的经典语录32句分享:…

抱怨是一种毒药,比较有深度的好文

抱怨是一种毒药,比较有深度的好文

问:怎么每天 都能免费收到这种 好文章呢?…

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

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

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