使用導航的目的是從一個頁面進入到另一個頁面。無論是預先決定的線性順序(向導)還是基於層次的用戶驅動程序(大部分網站的形式),或者動態生成的路徑,主要有3種方法實現:調用Navigate方法,使用Hyperlinks,使用導航日志。
Navigate方法:
導航容器支持Navigate方法,它允許改變當前頁,可以用目標頁的示例:

1 NavigateDemoPage nd=new NavigateDemoPage();
2 this.NavigationService.Navigate(nd);
1 NavigateDemoPage nd=new NavigateDemoPage();
2 this.NavigationService.Navigate(nd);
或者一個指向目標頁的URI來調用Navigate:

this.NavigationService.Navigate(new Uri("NavigateDemoPage.xaml",UriKind.Relative));
this.NavigationService.Navigate(new Uri("NavigateDemoPage.xaml",UriKind.Relative));
由URI指定的Page可以是松散的xaml文件,也可以是編譯后的資源,但xaml文件的根元素必須是page。如果想導航到一張html頁,則必須使用能夠接受一個URI參數的Navigate重載,例如:

this.NavigationService.Navigate(new Uri("http://www.microsoft.com"));
this.NavigationService.Navigate(new Uri("http://www.microsoft.com"));
導航容器同樣有兩個屬性,它們與Navigate的兩個重載方法相同,能夠通過設置Content屬性導航至一個Page實例:

this.NavigationService.Content=NavigateDemoPage;
this.NavigationService.Content=NavigateDemoPage;
也能設置Source屬性為一個URI來進行導航:

this.NavigationService.Source=new Uri("NavigateDemoPage",UriKind.Relative);
this.NavigationService.Source=new Uri("NavigateDemoPage",UriKind.Relative);
除了能以聲明的方式設置這兩個屬性外,沒有其他理由來用這兩個屬性替代Navigate方法了!
使用Hyperlink(超鏈接):
這種行為類似於html中的超鏈接,它使你能夠在TextBlock內嵌入Hyperlink元素,內容將會自動呈現為可被點擊的超鏈接形式,目標頁通過Hyperlink中的NavigateUri屬性指定,類似於html中的href:

<TextBlock>
Click <Hyperlink NavigateUri="NavigateDemoPage.xaml">here</Hyperlink>here to view more information.
</TextBlock>
<TextBlock>
Click <Hyperlink NavigateUri="NavigateDemoPage.xaml">here</Hyperlink>here to view more information.
</TextBlock>
這么做的目的僅僅是為了提供更為簡單的html風格的鏈接,當然,鏈接的目標頁已經預先知曉。
Hyperlink可以支持更為復雜的功能,與html中的超鏈接相似,例如,在多個frame的情況下導航至某個frame,可以把Hyperlink的TargetName屬性設置為目標frame的名字。為了能夠導航到Page的某個小節,可以在URI后面添加一個#號以及一個名字,這個名字表示目標頁上任何元素的名字。
使用導航日志:
每一個導航容器包含了記錄導航歷史信息的導航日志,這和web瀏覽器很像。導航日志提供了后退與前進的邏輯,它在內部維護了兩個棧,后退棧和前進棧,用戶可以自己初始化后退與前進的動作,也可以通過編程的方法調用導航容器的GoBack和GoForward方法。
NavigationWindow總有一個導航日志,但是Frame可能沒有自己的導航日志,這需要取決於JournalOwnership的屬性值。
類似web瀏覽器風格的后退和前進動作是由導航日志控制的,但是怎么實現停止與刷新按鈕呢?
在任何時候如果想停止一個正在處理的導航操作,可以調用導航容器的StopLoading方法,如果想刷新頁面,可以調用導航容器中的Refresh方法,它是沒有參數的。
通過設置Page的RemoveFromJournal屬性為true可以去除導航日志。
導航事件:
無論導航是否使用Navigate、Hyperlinks或導航日志,它總是以異步方式執行的。許多事件在導航過程中被觸發,它們允許你顯示富UI,甚至允許你取消導航。
在Navigated被觸發之前,NavigationProgress會被周期性觸發,這里沒有呈現的一個事件為NavigationStopped,如果導航被取消或者有錯誤發生時,這個事件會被觸發,而不是LoadCompleted事件。
注意:當從一頁HTML導航至另一頁HTML時,導航事件不會被觸發!