5 WPF中的Page頁面的使用

?????????以下是一個簡單的WPF示例,演示如何在三個Page之間進行導航切換,使用Frame控件作為導航容器,并包含基本的導航按鈕(前進/后退/主頁)

? ? ? ? Page類更簡單,比Window更精簡。

? ? ? ? 代碼見下文以及資源文件:

?https://download.csdn.net/download/qq_34047402/90919296

5WPF中的Page頁面的使用資源-CSDN文庫

?本例介紹如下界面實現:

一、Page的顯示

Page可以放到Frame中。

1), Frame的? NavigationUIVisibility ="Visible"?可以顯示導航的小圖標。

?<Frame x:Name="MainFrame" Grid.Column="1" NavigationUIVisibility="Visible"/>

2).使用Frame的Navigate方法可以導航到某個頁面,如下文

? MainFrame.Navigate(new Page1());?

3)頁面之間跳轉可以使用超級鏈接或者NavigationService.Navigate實現,

a).?NavigationService

????????NavigationService.Navigate(new Page3());

????????其中NavigationService:獲得了頁的宿

b). 使用Frame的GoBack,GoForward函數

?if (MainFrame.CanGoBack)
? ? ?MainFrame.GoBack();

if (MainFrame.CanGoForward)
? ? MainFrame.GoForward();

c). 超級鏈接

?<TextBlock Margin="10">
? ? ?click <Hyperlink NavigateUri="Page3.xaml" > 這兒</Hyperlink> 到頁面3
?</TextBlock>

如果想對URi做驗證,可以添加事件RequestNavigate 來處理具體的導航請求。

?<TextBlock Margin="10">
? ? ?click <Hyperlink NavigateUri="Page3.xaml" ?RequestNavigate="Hyperlink_RequestNavigate"> 這兒</Hyperlink> 到頁面3
?</TextBlock>

?private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)
?{
? ? ?if (e.Uri != null)
? ? ?{
? ? ? ? ?// 獲取當前NavigationService并導航
? ? ? ? ?var navService = NavigationService.GetNavigationService((DependencyObject)sender);
? ? ? ? ?navService?.Navigate(new Uri(e.Uri.ToString(), UriKind.RelativeOrAbsolute));
? ? ? ? ?e.Handled = true;? ?//設置為?true?表示事件已處理
? ? ?}

?}

關于參數?RequestNavigateEventArgs:

屬性/方法說明
e.Uri獲取Hyperlink中指定的目標URI(如?NavigateUri="Page2.xaml"
e.Handled設置為?true?表示事件已處理,阻止默認行為(必須設置!)
e.Source事件源(即Hyperlink控件本身)

二、代碼如下

<Window x:Class="WpfApp1.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:WpfApp1"mc:Ignorable="d"Title="Page導航示例" Height="450" Width="800"><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="Auto"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions><!-- 導航按鈕 --><StackPanel Grid.Row="0" Orientation="Vertical" Background="LightGray"><Button Content="首頁" Margin="5" Padding="10,2" Click="GoToHome_Click"/><Button Content="上一頁" Margin="5" Padding="10,2" Click="GoBack_Click"/><Button Content="下一頁" Margin="5" Padding="10,2" Click="GoForward_Click"/><Button Content="用Command跳轉到頁面2" Margin="5" Padding="10,2" Command="{Binding NavigationToPageCommand}" CommandParameter="/Pages/Page2.xaml"                    /><Button Content="用Command跳轉到頁面3" Margin="5" Padding="10,2" Command="{Binding NavigationToPageCommand}" CommandParameter="/Pages/Page3.xaml"        /><TextBlock Margin="10" VerticalAlignment="Center" Text="{Binding ElementName=MainFrame, Path=Content.Title}"/></StackPanel><!-- 導航容器 --><Frame x:Name="MainFrame" Grid.Column="1" NavigationUIVisibility="Hidden"/></Grid>
</Window>

<Page x:Class="WpfApp1.Pages.Page1"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:WpfApp1.Pages"mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800"Title="頁面1歡迎"><StackPanel VerticalAlignment="Center" HorizontalAlignment="Center"><TextBlock Text="這是頁面1" FontSize="24" Margin="10"/><Button Content="前往頁面2" Click="NavigateToPage2" Width="100" Margin="10"/></StackPanel>
</Page>
  public partial class Page1 : Page{public Page1(){InitializeComponent();}private void NavigateToPage2(object sender, RoutedEventArgs e){NavigationService.Navigate(new Page2());}}
public partial class Page2 : Page
{public Page2(){InitializeComponent();}private void NavigateToPage3(object sender, RoutedEventArgs e){NavigationService.Navigate(new Page3());}private void GoBackToPage1(object sender, RoutedEventArgs e){NavigationService.GoBack();}
}public partial class Page3 : Page{public Page3(){InitializeComponent();}private void GoToHome(object sender, RoutedEventArgs e){// 直接導航到Page1(清空導航歷史)NavigationService.Navigate(new Page1());}}public partial class MainWindow : Window{public MainWindow(){InitializeComponent();this.DataContext = new MainViewModel(this.MainFrame);}private void GoToHome_Click(object sender, RoutedEventArgs e){MainFrame.Navigate(new Page1());}private void GoBack_Click(object sender, RoutedEventArgs e){if (MainFrame.CanGoBack)MainFrame.GoBack();}private void GoForward_Click(object sender, RoutedEventArgs e){if (MainFrame.CanGoForward)MainFrame.GoForward();}}public class MainViewModel{private Frame _frame;public MainViewModel(Frame frame){_frame = frame;}private ICommand _navigationToPageCommand;public ICommand NavigationToPageCommand {get{return _navigationToPageCommand ?? new RelayCommand<object>( NavigationToPage, (s) => true);}set{_navigationToPageCommand = value;}}private void NavigationToPage(object page){try{string pageUrl = page as string;if(pageUrl!=null){_frame.Navigate(new Uri(pageUrl, UriKind.Relative));}}catch(Exception ex){}}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/907159.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/907159.shtml
英文地址,請注明出處:http://en.pswp.cn/news/907159.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于51單片機的音樂盒點陣屏proteus仿真

地址&#xff1a; https://pan.baidu.com/s/1hYzg2icjHV8jWJdltJkKxw 提取碼&#xff1a;1234 仿真圖&#xff1a; 芯片/模塊的特點&#xff1a; AT89C52/AT89C51簡介&#xff1a; AT89C51 是一款常用的 8 位單片機&#xff0c;由 Atmel 公司&#xff08;現已被 Microchip 收…

圖論:floyed算法

Floyd 算法是一種用于尋找加權圖中所有頂點對之間最短路徑的經典算法&#xff0c;它能夠處理負權邊&#xff0c;但不能處理負權環。即如果邊權有負數&#xff0c;切負權邊與其他邊構成了環就不能用該算法。該算法的時間復雜度為 \(O(V^3)\)&#xff0c;其中 V 是圖中頂點的數量…

STM32之看門狗(IWDG)

一、看門狗外設的原理與應用 背景說明 隨著單片機的發展&#xff0c;單片機在家用電器、工業自動化、生產過程控制、智能儀器儀表等領域的應用越來越廣泛。然而處于同一電力系統中的各種電氣設備通過電或磁的聯系彼此緊密相連&#xff0c;相互影響&#xff0c;由于運行方式的…

#RabbitMQ# 消息隊列進階

目錄 消息可靠性 一 生產者的可靠性 1 生產者的重連 2 生產者的確認 (1 Confirm* (2 Return 二 MQ的可靠性 1 數據持久化 2 Lazy Queue* 三 消費者的可靠性 1 消費者確認機制 2 消費失敗處理 3 業務冪等性 四 延遲消息 消息可靠性 在消息隊列中&#xff0c;可靠性…

《計算機組成原理》第 10 章 - 控制單元的設計

目錄 10.1 組合邏輯設計 10.1.1 組合邏輯控制單元框圖 10.1.2 微操作的節拍安排 10.1.3 組合邏輯設計步驟 10.2 微程序設計 10.2.1 微程序設計思想的產生 10.2.2 微程序控制單元框圖及工作原理 10.2.3 微指令的編碼方式 1. 直接編碼&#xff08;水平型&#xff09; 2.…

AstroNex空間任務智能控制研究與訓練數據集

數據集概述 AstroNex空間任務智能控制研究與訓練數據集是朗迪鋒科技基于Multiverse平臺精心打造的首個全面覆蓋航天器智能控制全周期的綜合數據集產品。該數據集匯集了軌道動力學、姿態控制、機器視覺、環境感知等多維度數據&#xff0c;為航天器智能算法研發提供豐富的訓練與…

??3D 幾何建模工具庫?Open CASCADE(OCCT)簡單介紹。

??Open CASCADE&#xff08;OCCT&#xff09;?? 的新手&#xff0c;我會用最簡單的方式幫你理解它是什么、能做什么&#xff0c;以及如何快速上手。 ??1. OCCT 是什么&#xff1f;?? ??一句話定義??&#xff1a;OCCT 是一個開源的 ??3D 幾何建模工具庫??&…

[7-1] ADC模數轉換器 江協科技學習筆記(14個知識點)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 DMA&#xff08;Direct Memory Access&#xff0c;直接內存訪問&#xff09;是一種硬件特性&#xff0c;它允許某些硬件子系統直接訪問系統的內存&#xff0c;而無需CPU的介入。這樣&#xff0c;CPU就可以處理其他任務&#xff0c;從而提高系…

篇章三 基礎——不可變類

目錄 1.是什么 2.為什么 3.怎么做 4.構造詳細的不可變類示例: 5.補充 5.1 Java標準庫中的不可變類 5.2 構造不可變類進階 1.對象包含嵌套的引用類型字段 2. 大型對象采用不可變類時,需考慮性能影響。 2.1 內存占用問題 2.2 垃圾回收壓力 2.3 復制開銷 2.4 優化策…

cuda ncu section 含義解釋

NVIDIA Nsight Compute (NCU) 是用于分析 CUDA 程序性能的工具&#xff0c;通過 Sections 組織性能指標。用戶提供的 24 個 Sections 涵蓋了計算、內存、調度、互連和可視化等方面。本報告詳細解釋每個 Section 的含義、用途及相關分析場景。 Sections 詳細解析 C2CLink 含義&…

NGINX HTTP/2 全面指南開啟、調優與實戰

一、為什么要用 HTTP/2&#xff1f; 多路復用&#xff08;Multiplexing&#xff09; 單連接上可并發交錯發送多路請求&#xff0c;避免了 HTTP/1.x 中的隊頭阻塞&#xff08;Head-Of-Line Blocking&#xff09;。頭部壓縮&#xff08;HPACK&#xff09; 對 HTTP 頭部字段進行高…

手寫簡單的tomcat

首先&#xff0c;Tomcat是一個軟件&#xff0c;所有的項目都能在Tomcat上加載運行&#xff0c;Tomcat最核心的就是Servlet集合&#xff0c;本身就是HashMap。Tomcat需要支持Servlet&#xff0c;所以有servlet底層的資源&#xff1a;HttpServlet抽象類、HttpRequest和HttpRespon…

智能體賦能效率,企業知識庫沉淀價值:UMI企業智腦的雙輪驅動!

智能體企業知識庫&#xff1a;UMI企業智腦的核心功能與價值 在人工智能技術飛速發展的今天&#xff0c;企業智能化轉型已經成為不可逆轉的趨勢。作為企業級AI智能體開發平臺的佼佼者&#xff0c;優秘智能推出的UMI企業智腦&#xff0c;以其強大的智能體開發能力和全面的企業知…

與 PyCharm 官方溝通解決開發環境問題記錄(進展:官方已推出2個新的修復版本)

??????主題&#xff1a;有關 PyCharm 中終端和環境激活問題的反饋&#xff1a;PY-81233 前言 目前進展&#xff1a; 官方已有2個修復版本推出測試。 更新方法&#xff1a; 使用JetBrains Toolbox App&#xff0c;如下圖所示&#xff0c;從“其他版本”進入查看更新。…

LINUX安裝運行jeelowcode后端項目(命令行)

環境準備 運行環境&#xff1a;JDK1.8開發工具&#xff1a; Idea、Maven默認已啟動中間件&#xff1a;&#xff08;推薦使用寶塔&#xff09;Mysql8.0、Redis、Minio第一步&#xff1a;下載JeelowCode項目并導入IDEA中 第二步&#xff1a;導入數據庫文件到mysql中&#xff0c;…

Android開機向導定制(2)開機向導配置

先貼lineage_wizard_script_user.xml的代碼&#xff1a; <WizardScript xmlns:wizard"http://schemas.android.com/apk/res/com.google.android.setupwizard"wizard:firstAction"welcome"><WizardAction wizard:uri"intent:#Intent;actiono…

守護電動“心臟”!仿真APP在汽車電池包隨機振動分析中的應用

汽車電動化、智能化、綠色化發展已成為全球各國應對氣候變化、實現低碳發展的共同選擇。在此背景下&#xff0c;新能源汽車持續高速發展。電池包作為新能源汽車的“心臟”&#xff0c;是其主要動力來源&#xff0c;直接影響車輛的續航里程與行駛安全。電池包結構的安全可靠性對…

實習面經(JAVA)

目錄 鎖升級 notify和notifyAll區別 Sleep和Wait的區別 ArrayList和ListedList區別 HashMap擴容原理 ConcurrentHashMap StringBuffer 和 StringBuilder 事務等級 索引結構 三次握手四次揮手&#xff0c;為什么是三次和四次 Java中重寫和重載的區別和應用場景 ArrayLis…

計算機網絡-WebSocket/DNS/Cookie/Session/Token/Jwt/Nginx

文章目錄 WebSocketDNS什么是dns域名解析底層協議 cookie/sessionToken/JWTNginx WebSocket 一種網絡通信協議&#xff0c;允許在單個 TCP&#xff08;半雙工&#xff09; 連接上進行全雙工通信&#xff08;客戶端和服務器可同時雙向傳輸數據&#xff09;。 HTTP是基于請求-響…

單片機如何快速實現查看實時數據

在用 Keil 做調試的時候&#xff0c;最讓人頭禿的是什么&#xff1f; 不是寫代碼的BUG&#xff0c;而是&#xff1a;這個條件變量是什么情況&#xff1f;為什么沒進入這個判斷&#xff1f;我代碼跑到哪里了&#xff1f; 其實本質上都是通過變量判斷代碼的執行順序有沒有問題 …