<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
有的時候,我們需要一個支援頁面跳轉的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導航框架的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45