頁面導航的例子我們使用的是兩個頁面,從第一個頁面(MainPage)導航到第二個頁面(SecondPage),然後可以從第二個頁面導航到第一個頁面 ,使用的os 7.1;
頁面導航沒有引入新的命名空間使用的到屬性是派生於PhoneApplicationPage類;
MainPage.xaml 檔案中用到的代碼為:
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"></Grid>
<TextBlock x:Name="Navigation" Text="導航到第二個頁面" Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Center" ManipulationStarted="Navigation_ManipulationStarted"></TextBlock>
</Grid>
隱藏檔案代碼為:
//textblock的導航時間 private void Navigation_ManipulationStarted(object sender, ManipulationStartedEventArgs e) { //為什麼一定是相對的--知識點① this.NavigationService.Navigate(new Uri("/SecondPage.xaml", UriKind.Relative)); e.Complete(); e.Handled = true; } protected override void OnManipulationStarted(ManipulationStartedEventArgs e) { //知識點② SolidColorBrush scb=new SolidColorBrush (); //知識點③ Color color = new Color(); color.A = (byte)245; color.R = (byte)135; color.G = (byte)25; color.B = (byte)15; scb.Color = color; ContentPanel.Background = scb; base.OnManipulationStarted(e); }
隱藏檔案的代碼是在預設代碼的基礎上加上以上兩個方法,實現的效果是當點擊(觸摸)非名為Navigation的TextBlock元素時,ContenPanel就會改變為設定好的固定顏色,MainPage:
知識點①:this.NavigationService.Navigate() 是頁面導航的核心方法參數是URI類型的對象,所以要New該類,並且執行個體化URI的時候SecondPage.xaml前有斜線,第二個參數表明 此URI是相對於SecondPage.xaml,絕對的URI是指完整引用某個資源如: http://www.sensengo.com/Index.html 相對URI取決於前面定義的基
URI(例如:/Index.html)
URI的建構函式有一個包含了基URI和相對URI字串:
Uri(Uri, String) |
根據指定的基 URI 和相對 URI 字串,初始化 Uri 類的新執行個體 |
執行個體:
Uri baseUri = new Uri("http://www.contoso.com");
Uri myUri = new Uri(baseUri, "catalog/shownew.htm");
所以URI執行個體構成了絕對URI,myUri.ToString()字串是為:http://www.contoso.com/catalog/shownew.htm
知識點②:SolidColorBrush類是繪製純色地區,SolidColorBrush的另一種構造方法為:SolidColorBrush(Color),所以以上代碼也可以這樣實現: ContenPane.Backgroud= new solidColorBrush(
Color.FromArgb(245,(byte)135,(byte)25,(byte)15));
知識點③:Color這裡就是SolidColorBrush的屬性color設定顏色,color類描繪的就是一個ARGB顏色,在形成映像中的每個像素的顏色表示為一個 32 位元:分別用 8 位表示 Alpha、紅色、綠色和藍色 (ARGB)。
這四個分量的值都是 0 到 255,其中 0 表示沒有亮度,255 表示最大亮度。
alpha 分量指定顏色的透明度:0 表示完全透明,255 表示完全不透明。 要確定顏色的 alpha、紅色、綠色或藍色成分
SecondPage.xaml 檔案主要代碼:
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"></Grid>
<TextBlock x:Name="Navigation" Text="導航到第-個頁面" Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Center" ManipulationStarted="Navigation_ManipulationStarted"></TextBlock>
</Grid>
隱藏檔案添加的兩個方法代碼:
//textblock的導航時間 private void Navigation_ManipulationStarted(object sender, ManipulationStartedEventArgs e) { //兩個方式實現的效果一樣,但是原理不同--知識點④ this.NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative)); //this.NavigationService.GoBack(); e.Complete(); e.Handled = true; } protected override void OnManipulationStarted(ManipulationStartedEventArgs e) { //純色 SolidColorBrush scb = new SolidColorBrush(); //alpha Color color = new Color(); color.A = (byte)255; color.R = (byte)145; color.G = (byte)35; color.B = (byte)15; scb.Color = color; ContentPanel.Background = scb; base.OnManipulationStarted(e); }
知識點④:在這裡因為只有兩個頁面,返回到上一個頁面的效果一樣,但是原理不同,this.NavigationService.Navigate是實現一個新的URI執行個體,this.NavigationService.GoBack()則是後退到記錄中的最新頁面,如果沒有記錄頁面則退出程式;
知識點⑤ :墓碑化:因為windows phone手機不支援第三方程式後台,所以提供了另一種方法Tomstone,簡單的講就是在程式A還在啟動並執行情況下,突然其他程式B,此時系統會暫時關閉程式A的線程,並暫存其狀態;當程式B使用完畢,程式A線程會重新啟動,恢複程式A之前的狀態;本節的頁面導航就是墓碑化的例子
小結:導航的核心一句話就是:this.NavigationService.Navigate()和返回上一個頁面this.NavigationService.GoBack(),簡單瞭解墓碑化;發現一個方 法也可以導航到其他頁面如下:
Uri uri = new Uri("/SecondPage.xaml", UriKind.Relative);
this.NavigationService.Source = uri;