WPF中的導航框架概述
有的時候,我們需要一個支持頁面跳轉(zhuǎn)的UI,例如文件瀏覽器,開始向?qū)У取τ谶@樣的界面,簡單的可以使用ContentControl + ContentTemplateSelector的方式來實現(xiàn),但是有的時候我們會需要一些更加高級的跳轉(zhuǎn)功能,如前進,回退等。這個時候,用這個方式就稍微有點力不從心了,此時,我們可以使用WPF的導航框架幫助我們快速實現(xiàn)這一功能。
WPF 的Page框架主要包括兩個部分,容器和頁面,
下面就以一個簡單的例子來介紹WPF的Page框架,首先我們創(chuàng)建第一個頁面:
<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>
然后再創(chuàng)建第二個頁面,
<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或瀏覽器等,大多數(shù)的時候用的是Frame和NavigationWindow,因為它提供了一系列導航相關(guān)的函數(shù),其中Frame更為靈活,這里就以Frame為例來介紹它的用法:
<Grid> <Frame x:Name="frame" Source="Page1.xaml" NavigationUIVisibility="Visible" /> </Grid>
運行上述代碼后,會得到在如下兩個頁面間跳轉(zhuǎn)的導航窗口。點擊Page1的鏈接可以跳轉(zhuǎn)到Page2, 點擊Page2的鏈接可以回退到Page1
頁面地址:
在WPF的導航框架中,頁面地址都是用URI來表示的,并不需要手動創(chuàng)建Page對象(也是可以手動創(chuàng)建的),例如Frame中設置的Source="Page1.xaml",它將起始頁面的URI設置為Page.xaml,系統(tǒng)會自動創(chuàng)建Page1對象。
頁面跳轉(zhuǎn):
頁面跳轉(zhuǎn)是通過NavigationService來控制的,在Frame和Page中都有該名為NavigationService的對象,可以通過它的Navigate函數(shù)來實現(xiàn)頁面跳轉(zhuǎn)。例如前面在Frame中設置Source="Page1.xaml"實際上就是通過如下函數(shù)實現(xiàn)的跳轉(zhuǎn):
frame.NavigationService.Navigate(new Uri("Page1.xaml", UriKind.Relative));
這個函數(shù)并不僅僅局限于URI,跳轉(zhuǎn)對象也不僅僅局限于URI,如下方式也都是可以的。
frame.NavigationService.Navigate(new Page1()); frame.NavigationService.Navigate(new Button()); frame.NavigationService.Navigate("Hello world");
另外,我們也可以像Page1.xaml種那樣通過Hyperlink的NavigateUri屬性來在Page的Xaml中實現(xiàn)頁面跳轉(zhuǎn),當然,其本質(zhì)也是調(diào)用NavigationService.Navigate來實現(xiàn)的。
導航命令:
除了頁面跳轉(zhuǎn)外,NavigationService還提供了一些基本的導航命令,如前進,回退,刷新。可以通過
frame.NavigationService.GoForward(); frame.NavigationService.GoBack(); frame.NavigationService.Refresh();
另外,WPF本身提供了一個標準的導航命令的集合NavigationCommands(比NavigationService),Page和Frame也支持這幾個命令的綁定(NavigationCommands的命令是比NavigationService能支持的要多的),因此我們可以使用命令行綁定非常方便的調(diào)用這些功能。如Page2種所使用的回退命令:
<Hyperlink Command="BrowseBack" >Page1</Hyperlink>
最后,簡單的介紹一個沒有什么技術(shù)含量,但很常用的功能,那就是Frame對象的導航工具條的重繪。 Frame對象本身是帶著一個導航工具條的,提供了一個類似IE的前進后退功能。將NavigationUIVisibility設置為Visible或Auto的時候可見。
但這個工具條過于簡陋,調(diào)試一下還可以,在最終交付的時候要么隱藏它,要么重寫它,重寫的方式一般就是改寫其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>
但這個常常用到,以便后續(xù)參考。
小結(jié):
本文主要介紹了WPF的導航框架的基本用法,更多的功能后面再寫文章陸續(xù)介紹?;蛘邊⒖次④浌俜降腗SDN:導航概述
到此這篇關(guān)于WPF導航框架的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Silverlight文件上傳下載實現(xiàn)方法(下載保存)
這篇文章主要介紹了Silverlight文件上傳下載實現(xiàn)方法(下載保存) ,需要的朋友可以參考下2015-11-11