共用方式為


巡覽拓撲概觀

本概觀介紹 WPF 中的導覽拓撲。 並接著說明三種常見的巡覽拓撲及其範例。

注意

閱讀本主題之前,您應該已熟悉 WPF 中使用頁面函數進行結構化導覽的概念。 如需上述兩個主題的詳細資訊,請參閱結構化巡覽概觀

本主題包含下列幾節:

在 WPF 中,導覽一般會包含頁面 (Page) 與按一下時導覽至其他頁面的超連結 (Hyperlink)。 導覽至的頁面會透過統一資源識別項 (URI) 予以識別 (請參閱 WPF 中的 Pack URI)。 請考慮使用下列簡單範例,而此範例顯示頁面、超連結和統一資源識別項 (URI):

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" WindowTitle="Page1">
  <Hyperlink NavigateUri="Page2.xaml">Navigate to Page2</Hyperlink>
</Page>
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" WindowTitle="Page2">
  <Hyperlink NavigateUri="Page1.xaml">Navigate to Page1</Hyperlink>
</Page>

這些頁面會排列在巡覽拓撲中,其結構取決於您在頁面之間的巡覽方式而定。 這種特定巡覽拓撲適合簡單的案例,不過巡覽可能需要更複雜的拓撲,其中有些只能在應用程式執行時定義。

本主題涵蓋三種常見的巡覽拓撲︰固定線性、固定的階層式和動態產生。 每種導覽拓撲都會示範一個包含 UI 的範例,與下圖所示的範例類似:

Task pages with data items and navigation buttons.具有資料項目和導覽按鈕的工作頁面。

結構化巡覽拓撲

巡覽拓撲有下列兩種廣泛的類型:

  • 固定拓撲:在編譯時期定義,且不會在執行階段變更。 固定拓撲適用於以線性或階層式順序的固定順序來瀏覽頁面。

  • 動態拓撲:根據從使用者、應用程式,或系統收集而得的輸入,在執行階段定義。 如果要以不同的順序瀏覽頁面,動態拓撲就十分實用。

雖然您可以使用頁面來建立巡覽拓撲,但本範例會使用頁面函式來提供額外的支援,藉此簡化透過拓撲頁面傳遞和傳回資料的支援。

固定線性拓撲類似於含有一個或多個精靈頁面,並以固定順序巡覽的精靈結構。 下圖顯示具有固定線性拓撲的精靈的高階結構和流程:

Diagram that shows a fixed linear topology.圖表:顯示固定線性拓撲。

透過固定線性拓撲進行巡覽的一般行為包括以下:

  • 從呼叫頁面巡覽至啟動器頁面,其可初始化精靈,並巡覽至精靈的第一頁。 不需要啟動器頁面 (無 UI PageFunction<T>),因為呼叫頁面可以直接呼叫第一個精靈頁面。 不過,如果精靈的初始化作業特別複雜,則可以使用啟動程式頁面來簡化這項作業。

  • 使用者可以利用 [向後] 和 [向前] 按鈕 (或超連結),在頁面之間巡覽。

  • 使用者可以利用日誌,在頁面之間巡覽。

  • 使用者可以按 [取消] 按鈕,取消任何精靈頁面中的精靈。

  • 使用者可以按 [結束] 按鈕,接受最後一個精靈頁面中的精靈。

  • 如果取消精靈,精靈會傳回適當的結果,但不會傳回任何資料。

  • 如果使用者接受精靈,精靈會傳回適當的結果,並傳回它所收集的資料。

  • 完成精靈時 (已接受或取消),即會從日誌中移除精靈所含的頁面。 這可將精靈的每個執行個體隔離,以避免潛在的資料或狀態異常。

透過固定的階層式拓撲進行動態巡覽

在某些應用程式中,頁面可以導覽至兩個以上的其他頁面,如下圖所示:

Diagram that shows a page that can navigate to multiple pages.圖表:顯示可導覽至多個頁面的頁面。

這個結構稱為固定的階層式拓撲,而周遊階層的順序通常是在執行階段由應用程式或使用者決定。 階層中每個可巡覽至兩個以上其他頁面的頁面,皆會在執行階段收集必要資料以判斷可巡覽至哪些頁面。 下圖擇一說明根據上圖的可能導覽順序:

Diagram that shows a possible navigation sequence.圖表:顯示可能的導覽順序。

雖然固定階層式結構中的頁面巡覽順序是在執行階段決定,但使用者體驗仍和固定線性拓撲的使用者體驗相同:

  • 從呼叫頁面巡覽至啟動器頁面,其可初始化精靈,並巡覽至精靈的第一頁。 不需要啟動器頁面 (無 UI PageFunction<T>),因為呼叫頁面可以直接呼叫第一個精靈頁面。 不過,如果精靈的初始化作業特別複雜,則可以使用啟動程式頁面來簡化這項作業。

  • 使用者可以利用 [向後] 和 [向前] 按鈕 (或超連結),在頁面之間巡覽。

  • 使用者可以利用日誌,在頁面之間巡覽。

  • 如果使用者向後巡覽日誌,即可變更巡覽順序。

  • 使用者可以按 [取消] 按鈕,取消任何精靈頁面中的精靈。

  • 使用者可以按 [結束] 按鈕,接受最後一個精靈頁面中的精靈。

  • 如果取消精靈,精靈會傳回適當的結果,但不會傳回任何資料。

  • 如果使用者接受精靈,精靈會傳回適當的結果,並傳回它所收集的資料。

  • 完成精靈時 (已接受或取消),即會從日誌中移除精靈所含的頁面。 這可將精靈的每個執行個體隔離,以避免潛在的資料或狀態異常。

在某些應用程式中,兩個以上頁面的巡覽順序只能在執行階段由使用者、應用程式或外部資料決定。 下圖說明一組尚未決定導覽順序的頁面:

A set of pages with an undetermined navigation sequence.一組尚未決定導覽順序的頁面。

下一個圖說明使用者已在執行階段選擇的導覽順序:

Diagram that shows a navigation sequence chosen at run time.圖表:顯示在執行階段所選擇的導覽順序。

巡覽順序也稱為動態產生的拓撲。 對使用者來說,即使使用另一種巡覽拓撲,其使用者體驗和上一個拓撲是一樣的:

  • 從呼叫頁面巡覽至啟動器頁面,其可初始化精靈,並巡覽至精靈的第一頁。 不需要啟動器頁面 (無 UI PageFunction<T>),因為呼叫頁面可以直接呼叫第一個精靈頁面。 不過,如果精靈的初始化作業特別複雜,則可以使用啟動程式頁面來簡化這項作業。

  • 使用者可以利用 [向後] 和 [向前] 按鈕 (或超連結),在頁面之間巡覽。

  • 使用者可以利用日誌,在頁面之間巡覽。

  • 使用者可以按 [取消] 按鈕,取消任何精靈頁面中的精靈。

  • 使用者可以按 [結束] 按鈕,接受最後一個精靈頁面中的精靈。

  • 如果取消精靈,精靈會傳回適當的結果,但不會傳回任何資料。

  • 如果使用者接受精靈,精靈會傳回適當的結果,並傳回它所收集的資料。

  • 完成精靈時 (已接受或取消),即會從日誌中移除精靈所含的頁面。 這可將精靈的每個執行個體隔離,以避免潛在的資料或狀態異常。

另請參閱