跟林永堅老師學WP7開發
- 內容概覽
- 使用xaml進行導航
- 使用C#代碼進行導航
- 地址別名
- 頁面之間的資料傳遞
- 回退按鈕
為了更好的控制導航,我們需要Crowdsourced Security Testing道頁面的架構與架構:
- Frame
- 只有一個單獨的PhoneApplicationFrame
- 包含一個或多個PhoneApplicationPage
- 也包含系統托盤和應用程式欄
- Page
- 包含標題,可以有獨立的應用程式欄
- Page之間可以相互導航
- SIlverlight for window phone 使用以頁面為基礎的頁面導航
- 與web的頁面導航類似
- 每個獨立的都有唯一的URI
- 每個獨立的頁面都是沒有狀態的
概念介紹完了,下面就是例子了:
在導航裡的一個很重要的控制項:hyplinkbutton,所以我先拖四個hyplinkbutton到介面中來,
這樣就是首頁面了,接下來再建立一個新的導航到的頁面Music.xaml到views目錄下,然後添加contant為音樂的hyperlinkbutton的NavigateUri
這樣啟動程式就可以正常的導航了,下面的三個按照同樣的操作就可以了,
第三步:在頁面裡使用,把HyperLinkButton的NavigationURi屬性修改成如下,到此別名導航就完成了。
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <HyperlinkButton Content="音樂" Height="30" HorizontalAlignment="Left" NavigateUri="Music" Margin="29,131,0,0" Name="hyperlinkButton1" VerticalAlignment="Top" Width="115" /> <HyperlinkButton Content="視頻" Height="30" HorizontalAlignment="Left" NavigateUri="Vedio" Margin="29,60,0,0" Name="Vedio" VerticalAlignment="Top" Width="115" /> <HyperlinkButton Content="瀏覽器" Height="30" HorizontalAlignment="Left" NavigateUri="WebBrowser" Margin="29,283,0,0" Name="WebBrowser" VerticalAlignment="Top" Width="115" /> <HyperlinkButton Content="圖片" Height="30" HorizontalAlignment="Left" NavigateUri="Picture" Margin="29,207,0,0" Name="hyperlinkButton4" VerticalAlignment="Top" Width="115" /> <Button Content="音樂" Height="72" HorizontalAlignment="Left" Margin="241,131,0,0" Name="musicbutton1" VerticalAlignment="Top" Width="160" Click="musicbutton1_Click" /> <Button Content="視頻" Height="72" HorizontalAlignment="Left" Margin="241,39,0,0" Name="videobutton2" VerticalAlignment="Top" Width="160" Click="videobutton2_Click" /> <Button Content="瀏覽器" Height="72" HorizontalAlignment="Left" Margin="241,323,0,0" Name="webbroserbutton3" VerticalAlignment="Top" Width="160" Click="webbroserbutton3_Click" /> <Button Content="圖片" Height="72" HorizontalAlignment="Left" Margin="241,225,0,0" Name="picturebutton4" VerticalAlignment="Top" Width="160" Click="picturebutton4_Click" /> </Grid>
- 頁面間傳遞資料,最常用的是通過QueryString來傳遞資料,
<HyperlinkButton Content="歌曲1" NavigateUri="/views/Music.xaml?song=歌曲1" Height="30" HorizontalAlignment="Left" Margin="175,230,0,0" Name="hyperlinkButton2" VerticalAlignment="Top" Width="200" />
在Music.xaml頁面被載入的時候我們就顯示傳遞過來的參數,
using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Windows.Shapes;using Microsoft.Phone.Controls;namespace PageNavigation.views{ public partial class Music : PhoneApplicationPage { public Music() { InitializeComponent(); } private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) { if (NavigationContext.QueryString.Count > 0) { textBlock1.Text = NavigationContext.QueryString["song"]; } } }}
- 使用別名來傳遞參數,首先需要修改App.xaml裡的映射規則
頁面修改為
<HyperlinkButton Content="歌曲1" NavigateUri="Music/歌曲1" Height="30" HorizontalAlignment="Left" Margin="175,230,0,0" Name="hyperlinkButton2" VerticalAlignment="Top" Width="200" />
注意:NavigationService預設不能傳遞對象(可以通過使用App類的靜態屬性、SIngleton類、把對象分解為QueryString來傳遞......)
源碼下載