網站首頁 編程語言 正文
有的時候,我們需要一個支持頁面跳轉的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:導航概述
原文鏈接:https://www.cnblogs.com/TianFang/p/4338412.html
相關推薦
- 2022-03-29 C++初階學習之模板進階_C 語言
- 2022-05-17 獲取當前機器注冊到nacos上的機器ip
- 2023-01-10 Go語言rune與字符串轉換的密切關系解析_Golang
- 2022-12-25 Redis中AOF與RDB持久化策略深入分析_Redis
- 2022-08-23 構建?Python?命令行參數的?4?種常見方式_python
- 2021-11-12 圖文詳解Flutter單例的實現_Android
- 2023-04-18 Android粒子線條效果實現過程與代碼_Android
- 2022-06-01 C語言?詳細分析結構體的內存對齊_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支