首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WPF 筆記:導航應用開發 (Page/Hyperlink/NavigationService)

     編輯:關於.NET

WPF 支援 **瀏覽器式導航應用** (XBAP) 與 **獨立導航應用** (NavigationWindow)。本文修正書中過時語法 (NavigationApplication → Application),展示 Page 導航、Hyperlink 聲明式跳轉、NavigationService 程式化控制。

應用程式入口配置

<Application x:Class="MyNavApp.App"
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    StartupUri="Page1.xaml"> <!-- 指定啟動頁面 -->
  <Application.Resources />
</Application>
  • 專案輸出類型:**Page** (非 Window)。
  • `StartupUri` 指向首個 Page。
  • WPF 自動提供**導航 UI** (上一頁/下一頁/歷史下拉) — 僅限非瀏覽器託管模式。

Page1.xaml:聲明式導航

<Page
    x:Class="MyNavApp.Page1"
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    Title="Page 1"> <!-- Page 用 Title 非 Text -->
  <TextBlock FontSize="72" TextWrapping="Wrap"> <!-- TextWrapping 非 TextWrap -->
    Check out
    <Hyperlink NavigateUri="Page2.xaml">page 2</Hyperlink>, <!-- 核心:聲明式跳轉 -->
    too.
  </TextBlock>
</Page>

Hyperlink vs NavigationService 等價性

<!-- XAML 聲明式 -->
<Hyperlink NavigateUri="Page2.xaml">Go Page 2</Hyperlink>

<!-- 等價後台代碼 -->
NavigationService.GetNavigationService(this).Navigate(new Uri("Page2.xaml", UriKind.Relative));
  • `NavigationService`:靜態輔助類,`GetNavigationService(DependencyObject)` 獲取當前導航上下文。
  • `Navigate(Uri)`:跳轉到新頁面,加入歷史堆疊。
  • `GoBack()` / `GoForward()`:歷史導航,可綁定按鈕 `Click` 事件。

程式化導航按鈕範例

<Page ...>
  <StackPanel>
    <Button Content="上一頁" Click="Back_Click" />
    <Button Content="下一頁" Click="Forward_Click" />
    <Button Content="跳轉 Page3" Click="Jump_Click" />
  </StackPanel>
</Page>

// Code-behind
void Back_Click(object sender, RoutedEventArgs e) {
    NavigationService.GetNavigationService(this).GoBack();
}
void Forward_Click(...) { ...GoForward(); }
void Jump_Click(...) { ...Navigate(new Uri("Page3.xaml", UriKind.Relative)); }

語法遷移提醒

舊版 (書中)新版 (當前)
`NavigationApplication``Application` (通用)
`TextBlock.TextWrap``TextBlock.TextWrapping`
`Page.Text``Page.Title`

導航應用架構優勢

  • **無狀態頁面**:每次導航創建新 Page 實例,天然隔離狀態 (需注意資料持久化)。
  • **瀏覽器整合**:XBAP 運行於 IE/Edge 內,支援 Address Bar、Favorites、History。
  • **Journal 歷史管理**:WPF 內建導航日誌,支援自定義 `IJournalEntry`、頁面狀態保存 (`PageKeepAlive`)。

現代替代方案

WPF 導航框架已較少用於新專案。現代替代:
- **MVVM + Frame/Page** (單頁應用風格)
- **Prism/Caliburn.Micro** 區域導航
- **Avalonia/Uno Platform** 跨平台導航
但理解 `NavigationService`/`Journal` 機制,對掌握 WPF 視圖生命週期、狀態管理仍有參考價值。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved