在windows phone 中微軟為我們提供了頁面間傳遞參數的解決方案,下面就為大家介紹使用方法,頁面傳值的案例中我們建立兩個頁面,一個是MainPage另一個是SecondPage頁面;MianPage頁面的主要代碼為:
<Grid x:Name="ContentPanel" Grid.Row="1" Background="Goldenrod" Margin="12,0,12,0"></Grid>
<TextBlock x:Name="Navigation" Text="導航到第二個頁面" Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Center" ManipulationStarted="Navigation_ManipulationStarted"></TextBlock>
</Grid>
MainPage 設定好顏色的:
從上面代碼可以看出我們為名為ContentPanel的Grid的屬性Background設定為一個金麒麟色,當點擊名為Navigation的TextBlock元素時,把ContentPanel的Grid的屬性Background設定的顏色傳遞到第二個頁面去;Navigation的事件ManipulationStarted 的隱藏代碼為:
private void Navigation_ManipulationStarted(object sender, ManipulationStartedEventArgs e) { //獲得顏色ARGB值 SolidColorBrush scb = (SolidColorBrush)ContentPanel.Background; Color c = scb.Color; //參數傳遞格式--知識點① Uri uri = new Uri("/SecondPage.xaml?Red="+c.R+"&Green="+c.G+"&Blue="+c.B, UriKind.Relative); this.NavigationService.Source = uri; e.Complete(); e.Handled = true; }
頁面需要傳遞的值設定好之後,會導航到第二個頁面SecondPage頁面,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>
SecondPage頁面效果:
從上面代碼中看一看出我們並沒有名為ContentPanel的Grid的屬性Background設定顏色值,這裡我們會從隱藏檔案對其背景顏色進行設定,Navigation的事件ManipulationStarted 的隱藏代碼為:
//textblock的導航時間 private void Navigation_ManipulationStarted(object sender, ManipulationStartedEventArgs e) { this.NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative)); e.Complete(); e.Handled = true; }
OnNavigatedTo隱藏檔案的方法是:
//活動頁面建構函式之後--知識點② protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { //以泛型集合的方式獲得傳遞過來數值--知識點③ IDictionary<string, string> para = this.NavigationContext.QueryString; if (para.Count>0) { byte r = Byte.Parse(para["Red"]); byte b = Byte.Parse(para["Blue"]); byte g = Byte.Parse(para["Green"]); ContentPanel.Background=new SolidColorBrush(Color.FromArgb(255,r,g,b)); } }
此方法獲得從MainPage也傳遞類的參數,我們進行解析,根據解析到的結果設定 SecondPage中ContentPanel.Background屬性,這也就完成參數的傳遞了;
這裡參數傳遞的格式是我們要注意的,參數是在相對URI後緊接著是問號(?),之後就是索引值對的形式了(key=value),如果參數是多個,則需要用一個&符號隔開
這裡需要用到的一個方法,即OnNavigatedTo;官方給出的結識是:當頁面變為架構中的活動頁面時調用,可以理解為從A頁面導航到B頁面的時候,此時B頁面變為活動頁面,這時候調用該方法,此方法是在活動頁面建構函式載入完成之後被調用,也就是說建構函式執行完成之後就會立即執行此方法
NavigationContext類是擷取導航的狀態,唯一的一個屬性QueryString是擷取查詢字串值的集合。在返回的集合類型中根據Key獲得Value的值
記住:參數傳遞的格式多個參數傳遞需要用&符號隔開;活動頁面接受參數時重寫的 OnNavigatedTo方法;this.NavigationContext.QueryString接受所有傳遞到此頁面的參數及其值,返回一個字典容器