有的時候,咱們須要一個支持頁面跳轉的UI,例如文件瀏覽器,開始嚮導等。對於這樣的界面,簡單的可使用ContentControl + ContentTemplateSelector的方式來實現,可是有的時候咱們會須要一些更加高級的跳轉功能,如前進,回退等。這個時候,用這個方式就稍微有點力不從心了,此時,咱們可使用WPF的導航框架幫助咱們快速實現這一功能。html
WPF 的Page框架主要包括兩個部分,容器和頁面,windows
下面就以一個簡單的例子來介紹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>
而後再建立第二個頁面,app
<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對象。spa
頁面跳轉: 命令行
頁面跳轉是經過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:導航概述
轉載來源:http://www.cnblogs.com/TianFang/p/4338412.html