成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Windows Phone編程中頁面間傳值方法

移動開發
實現第一個傳值要求的方法很簡單,只要通過給NavigationService的目標頁面地址附帶上參數再由目標頁面獲取參數即可,而我們要注意的地方是,由于移動設備設計的便捷性要求,我們應該避免那些很復雜的傳遞參數的設計,并且,在設計時要注意Windows Phone設計中的墓碑機制,才能設計出合理高效的WP應用。

WP開發過程中有時會遇到頁面間轉值的需求,如果定義兩個頁面,一個是初始頁面Source Page,另外一個是跳轉的頁面Destination Page,簡單地分析主要有兩個方面的要求:

  • 首先是在source page跳轉到destination page時給destination page頁面傳值的實現;
  • 然后是當在destination page中調用goback函數回到source page時如何在source page傳值;

第一點系統本身提供了基本的實現方法,新建一個項目DataPassingDemo,然后新建一個頁面SecondPage.xaml,我們需要實現就是 從MainPage中跳轉到SecondPage中去,并傳遞參數讓SecendPage捕捉。首先在Mainpage中增加一個Textblock并且 增加事件處理函數:

  1. <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">            
  2.     <TextBlock Text="Navigate to 2nd page with data" HorizontalAlignment="Center" 
  3.     VerticalAlignment="Center" Padding="0 34"               
  4.          ManipulationStarted="TextBlock_ManipulationStarted"/>        
  5. </Grid> 

在Mainpage的后臺代碼中,實現TextBlock_ManipulationStarted方法如下:

  1. private void TextBlock_ManipulationStarted(object sender, ManipulationStartedEventArgs args) 
  2. {            
  3.     string destination ="/SecondPage.xaml?parameter1=hello&parameter2=world"
  4.          this.NavigationService.Navigate(new Uri(destination, UriKind.Relative));            
  5.     args.Complete();            
  6.     args.Handled =true;        

可以看到上面的那個destination是不是很像網頁間傳遞參數的形式呢?同理在SecondPage中增加一個Textblock,并給該 Textblock的ManipulationStarted事件中增加Goback()事件。同時,為了捕捉MainPage傳遞過來的參數,在 SecondPage的后臺代碼中實現下面的代碼:

  1. protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs args) 
  2.         { 
  3.             IDictionary<string,string> parameters =this.NavigationContext.QueryString; 
  4.             if (parameters.ContainsKey("parameter1")) 
  5.             { 
  6.                 string parameter1 = parameters["parameter1"]; 
  7.                 string parameter2 = parameters["parameter2"]; 
  8.                 txtblk.Text = String.Format("Parameter1 is:{0} and parameter2 is:{1}", parameter1, parameter2); 
  9.             } 
  10.             base.OnNavigatedTo(args); 
  11.         } 

通過重載OnNavigatedTo函數實現獲取傳遞過來的參數并在其中的一個TextBlock中顯示出來。

所以實現第一個傳值要求的方法很簡單,只要通過給NavigationService的目標頁面地址附帶上參數再由目標頁面獲取參數即可,而我們要注意的地方是,由于移動設備設計的便捷性要求,我們應該避免那些很復雜的傳遞參數的設計,并且,在設計時要注意Windows Phone設計中的墓碑機制,才能設計出合理高效的WP應用。

接著我們來考慮第二個問題,如何在頁面間共享,傳遞數據。我們可以考慮到如果有一個是中間的“容器”可以存放一些公共的數據的話那且不是可以實現這個要求 了嗎?這時如果熟悉Silverlight設計的話頭腦里就會呈現出App這個類,由于所有的頁面都可以訪問到App這個類,所以我們可以把一些準備共享 的數據放在App這個類中定義。就在上面那個例子中,我們在App類中增加一個公共變量:

  1. public string SharedString {set;get; }  

這時如果想在MainPage中給SecondPage傳遞參數的話則需要先訪問那個共享數據,這時的MainPage中的后臺代碼如下:

  1. private void TextBlock_ManipulationStarted(object sender, ManipulationStartedEventArgs args) 
  2.     (Application.Currentas App).SharedString ="Hello World"
  3.     this.NavigationService.Navigate(new Uri("/SecondPage.xaml", UriKind.Relative)); 
  4.     args.Complete(); 

即在訪問SecondPage前先修改那個共享數據的值,然后在SecondPage的OnNavigatedTo事件中代碼修改如下:

  1. protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs args) 
  2.     string sharedString = (Application.Currentas App).SharedString; 
  3.     txtblk.Text = sharedString; 
  4.     base.OnNavigatedTo(args); 

同理,如果想通過SecondPage向MainPage傳遞數據的話,只要在調用GoBack函數前修改那個共享數據的值再由MainPage中的OnNavigatedTo函數來獲取到相對應的數據即可。

到這里我們已經基本可以實現上面的兩個要求了,但第二種方法只是一種取巧的方法,在邏輯及實現上都有不合理的地方,我們應該走思考另外一種更為合理與通用 的實現方式,那就是OnNavigatedFrom這個函數了。大家可能會想,from不是很明顯嗎,我們就是通過from的原頁面跳到目標頁面的,那么 這個from有何用處呢。其實它的用處挺大的,例如,通過這個函數我們可以很好的解決上面提到的問題。

最后用一個例子去說明這種方式的具體實現,我們定義兩個頁面,和之前的類似,這次我們通過SecondPage返回的值去定義MainPage頁面的顏色,MainPage的后臺代碼定義如下:

  1. public partial class MainPage : PhoneApplicationPage 
  2.     { 
  3.         public MainPage() 
  4.         { 
  5.             InitializeComponent(); 
  6.         } 
  7.         public Color? ReturnedColor {set;get; } 
  8.         private void TextBlock_ManipulationStarted(object sender, ManipulationStartedEventArgs args) 
  9.         { 
  10.             this.NavigationService.Navigate(new Uri("/SecondPage.xaml", UriKind.Relative)); 
  11.             args.Complete(); 
  12.             args.Handled =true
  13.         } 
  14.     } 

這里定義為Color?,因為返回的值有可能是非顏色的。而SecondPage中的后臺代碼定義如下:

View Code

我們通過獲得一個隨機數值組合而成的顏色設置為SecondPage的背景顏色,然后通過OnNavigatedFrom設置ReturnedColor 為當前背景顏色,所以為了獲取SecondPage返回的ReturnedColor,在MainPage的后臺代碼中還需要重載 OnNavigatedTo方法響應這個OnNavigatedFrom:

  1. protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs args) 
  2.         { 
  3.             if (ReturnedColor !=null
  4.                 ContentPanel.Background = 
  5.                 new SolidColorBrush(ReturnedColor.Value); 
  6.             base.OnNavigatedTo(args); 
  7.         } 

通過OnNavigatedFrom與OnNavigatedTo,我們就完成了數據的傳遞過程。

責任編輯:閆佳明 來源: oschina
相關推薦

2010-05-11 16:55:12

Windows Pho

2012-06-07 09:33:13

Windows Pho

2010-05-11 16:47:32

Windows Pho

2012-04-20 12:59:41

Phone

2013-06-03 10:22:41

iOS開發移動開發頁面間傳值

2012-05-21 14:04:46

TegraWindows Pho

2013-04-17 10:54:18

Windows PhoWindows Pho

2012-06-13 13:46:31

Windows Pho諾基亞地圖

2009-07-06 10:00:31

JSP頁面傳值

2009-09-04 11:20:47

ASP.NET頁面間值

2012-08-17 13:44:26

Windows Pho

2010-04-08 17:40:23

Windows Pho

2009-09-07 03:44:50

C#窗體間傳值

2011-06-08 10:28:15

ASP.Net

2012-06-29 13:31:56

ServletJSPJava

2013-06-14 17:28:11

Windows PhoWP開發播放聲音

2012-11-27 10:01:04

微軟Windows Pho

2011-05-24 09:42:24

Windows PhoMangoWindows Pho

2012-11-27 09:57:49

微軟Windows PhoApollo Plus

2012-04-19 08:42:22

春Phone沙龍
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 综合久久综合久久 | 青青草网站在线观看 | 91视频免费视频 | 日韩一区二区在线观看视频 | 成人免费一区二区 | 亚洲成av人片在线观看 | 最近中文字幕在线视频1 | 久久91 | 欧美色性| 成人精品久久日伦片大全免费 | 中文在线播放 | 殴美成人在线视频 | 毛片免费观看视频 | 精品欧美一区二区三区精品久久 | 久久久青草婷婷精品综合日韩 | 国产成人a亚洲精品 | 日韩精品一区二区三区中文在线 | 夜夜夜久久久 | 亚洲在线成人 | 超级乱淫av片免费播放 | 米奇7777狠狠狠狠视频 | 91一区二区| 精品国产乱码久久久久久老虎 | 欧美电影免费观看 | 国产精品久久久久久久久久久免费看 | 天堂资源最新在线 | 鸡毛片| 国产高清在线精品一区二区三区 | 日本一区二区视频 | 精品入口麻豆88视频 | 欧美一级淫片免费视频黄 | 91久久精品国产91久久性色tv | 欧美一级在线观看 | 国产午夜高清 | 99re视频在线 | 国产乱码精品1区2区3区 | 亚洲精品区 | 91在线看网站 | 伊人伊人| 久久精品一区二区三区四区 | 羞羞视频在线观看 |