日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

Windows Phone 7 - 页面间传值 来源-http://blog.csdn.net/dncts/article/details/6160067

發(fā)布時(shí)間:2024/10/12 windows 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows Phone 7 - 页面间传值 来源-http://blog.csdn.net/dncts/article/details/6160067 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Windows Phone 7 - 頁(yè)面間傳值

分類: Windows Phone 7 441人閱讀 評(píng)論(0) 收藏 舉報(bào)

在頁(yè)面間導(dǎo)航時(shí)傳遞參數(shù)的方式大致有3種,QueryString,全局變量和獨(dú)立存儲(chǔ)。本文只介紹前兩種傳值方式。

一.QueryString方式

?

在頁(yè)面1中的Button事件處理程序中添加了如下代碼: [c-sharp] view plaincopy
  • private?void?btnMain_Click(object?sender,?RoutedEventArgs?e)??
  • {??
  • ?????string?target?=?"/SubPage.xaml";??
  • ?????target?+=?string.Format("?InputText={0}",?txtInput.Text);??
  • ?????this.NavigationService.Navigate(new?Uri(target,?UriKind.Relative));??
  • }??
  • 程序運(yùn)行時(shí)這個(gè)Uri是這樣的:”/SubPage.xaml?InputText=Hello, Windows Phone 7!” 它的形式和HTML中的查詢字符串 (Query String)一樣,如果要傳遞多個(gè)參數(shù),可以用&來(lái)合并,例如: ”/SubPage.xaml?InputText=Hello, Windows Phone 7!&Name=Zhang Yin”。 頁(yè)面2中Button的Click事件處理程序代碼如下: [c-sharp] view plaincopy
  • private?void?btnBack_Click(object?sender,?RoutedEventArgs?e)??
  • {??
  • ?????if?(this.NavigationService.CanGoBack)??
  • ?????????this.NavigationService.GoBack();??
  • }??
  • 并且我在頁(yè)面2中重寫了OnNavigatedTo方法。OnNavigatedTo方法是定義在Page類中的, 所以PhoneApplicationPage也繼承了此方法,它是一個(gè)Virtual方法,所以需要用override關(guān)鍵字重寫。 OnNavigatedTo在頁(yè)面被創(chuàng)建后馬上會(huì)被調(diào)用,也就是說(shuō)在OnNavigatedTo 方法被調(diào)用時(shí),頁(yè)面的構(gòu)造函數(shù)已經(jīng)執(zhí)行完畢了。 類似的還有OnNavigatedFrom方法,它是在離開當(dāng)前頁(yè)面時(shí)觸發(fā)的。 頁(yè)面2中OnNavigatedTo方法內(nèi)的代碼如下: [c-sharp] view plaincopy
  • protected?override?void?OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs?e)??
  • {??
  • ????????????string?value?=?string.Empty;??
  • ????????????IDictionary<string,?string>?queryString?=?this.NavigationContext.QueryString;??
  • ????????????if?(queryString.ContainsKey("InputText"))??
  • ????????????{??
  • ????????????????txt.Text?=?queryString["InputText"];??
  • ????????????}??
  • ????????????base.OnNavigatedTo(e);??
  • }??
  • Page類定義了一個(gè)類型為NavigationContext的NavigationContext屬性,它包含一個(gè)類型為IDictionary<string, string>的 QueryString屬性。判空檢測(cè)后,將InputText鍵對(duì)應(yīng)的值賦給文本框的Text屬性。 最后觸發(fā)基類的OnNavigatedTo方法以保證基類的功能正常。當(dāng)然也可以使用下面的代碼,效果是一樣的: [c-sharp] view plaincopy
  • protected?override?void?OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs?e)??
  • {??
  • ????????????string?value?=?string.Empty;??
  • ????????????IDictionary<string,?string>?queryString?=?this.NavigationContext.QueryString;??
  • ????????????queryString.TryGetValue("InputText",?out?value);??
  • ????????????if?(value?!=?null)??
  • ????????????{??
  • ????????????????txt.Text?=?value;??
  • ????????????}??
  • ????????????base.OnNavigatedTo(e);??
  • }??
  • 通過(guò)QueryString雖然可以向一個(gè)頁(yè)面?zhèn)鬟f參數(shù),但卻無(wú)法回傳數(shù)據(jù),例如我在頁(yè)面2中將文本修改為“Windows Phone 7!”, 然后點(diǎn)擊“前往第1頁(yè)”按鈕,得到的還是初始的那個(gè)頁(yè)面。要解決這個(gè)問(wèn)題,就需要使用全局變量了。

    二.全局變量

    對(duì)于全局變量來(lái)說(shuō),我們可以在項(xiàng)目中添加一個(gè)在整個(gè)程序生命周期中都能訪問(wèn)到的類,將相應(yīng)的數(shù)據(jù)保存在這個(gè)類的屬性里。

    不過(guò)現(xiàn)在我們不用自己動(dòng)手做這些額外的工作了。項(xiàng)目中本身就有一個(gè)類滿足這個(gè)需求:App類。 App 類繼承自Application類。

    通過(guò)Application的Current屬性就可以獲取到與當(dāng)前程序關(guān)聯(lián)的Application類實(shí)例,然后通 過(guò)轉(zhuǎn)換就可以得到App類實(shí)例。

    程序中所有的頁(yè)面都可以訪問(wèn)到這個(gè)App類,所以將我們要保存的數(shù)據(jù)放到App類中是最好不過(guò)了,免去了自己實(shí)現(xiàn)的麻煩。

    在App類中添加一個(gè)公有的InputText屬性(C# 3.0的自動(dòng)屬性) :

    [c-sharp] view plaincopy
  • public?partial?class?App?:?Application??
  • {??
  • ?????public?string?InputText?{?get;?set;?}??
  • ?????……??
  • }??
  • 頁(yè)面1中的代碼如下:

    [c-sharp] view plaincopy
  • protected?override?void?OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs?e)??
  • ????????{??
  • ????????????App?app?=?Application.Current?as?App;??
  • ????????????if?(app.InputText?!=?null)??
  • ????????????????txtPage1.Text?=?app.InputText;??
  • ????????????base.OnNavigatedTo(e);??
  • ????????}??
  • ??
  • ????????protected?override?void?OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs?e)??
  • ????????{??
  • ????????????App?app?=?Application.Current?as?App;??
  • ????????????app.InputText?=?txtPage1.Text;??
  • ????????????base.OnNavigatedFrom(e);??
  • ????????}??
  • 我在OnNavigatedTo方法內(nèi),讀取App類的InputText值,為的是當(dāng)在頁(yè)面2中修改了文本后可以反映到頁(yè)面1中。

    注意:OnNavigatedTo方法是在當(dāng)前頁(yè)面被激活(成為活動(dòng)頁(yè)面)時(shí)調(diào)用的。

    在OnNavigatedFrom方法中將文本框賦給App類的InputText屬性,供頁(yè)面2去讀取。

    頁(yè)面2中的代碼如下:

    [c-sharp] view plaincopy
  • protected?override?void?OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs?e)??
  • ????????{??
  • ????????????App?app?=?Application.Current?as?App;??
  • ????????????if?(app.InputText?!=?null)??
  • ????????????????txtPage2.Text?=?app.InputText;??
  • ????????????base.OnNavigatedTo(e);??
  • ????????}??
  • ??
  • ????????protected?override?void?OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs?e)??
  • ????????{??
  • ????????????App?app?=?Application.Current?as?App;??
  • ????????????app.InputText?=?txtPage2.Text;??
  • ????????????base.OnNavigatedFrom(e);??
  • ????????}??
  • 頁(yè)面2中的操作與頁(yè)面1類似。這樣,當(dāng)我們?cè)俅螌㈨?yè)面2中的文本修改為“Windows Phone 7!”,然后點(diǎn)擊“前往第1頁(yè)”按鈕時(shí),

    就可以得到想要的結(jié)果了。

    ?

    三.PhoneApplicationService類

    類似于App類,我們還可以將要在多個(gè)頁(yè)面中訪問(wèn)的數(shù)據(jù)保存在PhoneApplicationService的State屬性中。

    它的類型是IDictionary<string, object>,所以我們可以保存任意對(duì)象,不過(guò)前提是這個(gè)對(duì)象是可序列化的(serializable)。

    在程序中,我們無(wú)需自己創(chuàng)建的實(shí)例,通過(guò)PhoneApplicationService的靜態(tài)屬性Current就可以獲取到已有的實(shí)例。

    注意:在程序中訪問(wèn)PhoneApplicationService類需要添加下面的名稱空間:

    usingMicrosoft.Phone.Shell;

    程序代碼如下,頁(yè)面1中的代碼如下:

    [c-sharp] view plaincopy
  • protected?override?void?OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs?e)??
  • ????????{??
  • ????????????if?(PhoneApplicationService.Current.State.ContainsKey("InputText"))??
  • ????????????{??
  • ????????????????txtPage1.Text?=?PhoneApplicationService.Current.State["InputText"]?as?string;??
  • ????????????}??
  • ????????????base.OnNavigatedTo(e);??
  • ????????}??
  • ??
  • ????????protected?override?void?OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs?e)??
  • ????????{??
  • ????????????PhoneApplicationService.Current.State["InputText"]?=?txtPage1.Text;??
  • ????????????base.OnNavigatedFrom(e);??
  • ????????}??
  • 頁(yè)面2中的代碼如下:

    [c-sharp] view plaincopy
  • protected?override?void?OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs?e)??
  • ????????{??
  • ????????????if?(PhoneApplicationService.Current.State.ContainsKey("InputText"))??
  • ????????????{??
  • ????????????????txtPage2.Text?=?PhoneApplicationService.Current.State["InputText"]?as?string;??
  • ????????????}??
  • ????????????base.OnNavigatedTo(e);??
  • ????????}??
  • ??
  • ????????protected?override?void?OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs?e)??
  • ????????{??
  • ????????????PhoneApplicationService.Current.State["InputText"]?=?txtPage2.Text;??
  • ????????????base.OnNavigatedFrom(e);??
  • ????????}??
  • 四.關(guān)于OnNavigatedTo和OnNavigatedFrom方法

    我覺得這兩個(gè)方法的名字起的不太好,有時(shí)候容易混淆,如果把OnNavigatedTo改為OnNavigatedToThisPageFromOther,

    把OnNavigatedFrom改為OnNavigatedFromThisPageToOther就會(huì)很清晰了,當(dāng)然這只是幫助我們記憶的一種方法了。

    下面是MSDN中對(duì)這兩個(gè)方法的一些建議:

    OnNavigatedTo:重寫 OnNavigatedTo 方法以檢查導(dǎo)航請(qǐng)求并且準(zhǔn)備供顯示的頁(yè)面。

    例如,可以加載請(qǐng)求的數(shù)據(jù)并且啟用或禁用可視化元素。通常是使用?OnNavigatedTo?方法,而非為?Loaded?事件創(chuàng)建事件處理程序

    最好使用 OnNavigatedTo 方法,因?yàn)橹辉诿看雾?yè)面成為活動(dòng)頁(yè)面時(shí)調(diào)用該方法一次。

    Silverlight 框架在每次將元素添加到可視化樹時(shí)引發(fā)?Loaded?事件,在激活某一頁(yè)面時(shí)該事件可能會(huì)多次發(fā)生。

    OnNavigatedFrom:重寫 OnNavigatedFrom 方法以便在頁(yè)面成為非活動(dòng)時(shí)對(duì)該頁(yè)面執(zhí)行最后的操作。

    例如,可以更新與該頁(yè)面相關(guān)的數(shù)據(jù)。通常是使用?OnNavigatedFrom?方法,而非為?Navigated?事件創(chuàng)建事件處理程序

    最好使用 OnNavigatedFrom 方法,因?yàn)椴槐卦購(gòu)?NavigationService?對(duì)象移除事件處理程序以避免對(duì)象生存期問(wèn)題。

    轉(zhuǎn)載于:https://www.cnblogs.com/songtzu/archive/2012/04/11/2442069.html

    總結(jié)

    以上是生活随笔為你收集整理的Windows Phone 7 - 页面间传值 来源-http://blog.csdn.net/dncts/article/details/6160067的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。