WPF中的导航框架

时间:2022-01-01 03:11:32

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

        

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

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

<Page x:Class="WpfApplication1.Page1" xmlns="" xmlns:x="" xmlns:mc="" xmlns:d="" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300" Title="Page1"> <Grid> <TextBlock> <Run>### This is Page 1, Lets go to</Run> <Hyperlink NavigateUri="Page2.xaml" >Page2</Hyperlink> </TextBlock> </Grid> </Page>

然后再创建第二个页面,

<Page x:Class="WpfApplication1.Page2" xmlns="" xmlns:x="" xmlns:mc="" xmlns:d="" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300" Title="Page2"> <Grid> <TextBlock> <Run>~~~ This is Page 2, Lets go to</Run> <Hyperlink Command="BrowseBack" >Page1</Hyperlink> </TextBlock> </Grid> </Page>

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

<Window x:Class="WpfApplication1.MainWindow" xmlns="" xmlns:x="" Title="MainWindow" Height="350" Width="525"> <Grid> <Frame x:Name="frame" Source="Page1.xaml" NavigationUIVisibility="Visible"> </Frame> </Grid> </Window>

运行上述代码后,会得到在如下两个页面间跳转的导航窗口。点击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,如下方式也都是可以的。