Windows Phone 7(WP7)開發 “後退按鍵” 與 “在OnNavigationTo中處理QueryString”

來源:互聯網
上載者:User

先看一張簡圖:

在程式中進行頁面的跳轉是再正常不過的事情了,但是在WP7的程式中,我們可能還需要多考慮一下後退按鈕給我帶來的“麻煩”。

在中的這種頁面結構中,假設在page2.xaml.cs中有如下代碼:

        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);

if (NavigationContext.QueryString.ContainsKey("id"))
{
string id= NavigationContext.QueryString["id"];
if (id=="1")
NavigationService.Navigate(new Uri("page3.xaml",UriKind.Relative));
}
}

   儘管這個邏輯很奇怪,為什麼ID=1的時候就跳到PAGE3呢?哦,那不是我們討論的重點。

  運行程式,現象如下:從Page1點擊某按鈕並傳遞id=1到Page2,然後Page2直接跳轉到了Page3.如果此時想後退,按手機左下角的[上一頁] 按鈕,問題來了!螢幕閃一下,又回到了Page3.原理很簡單,就是因為Page2每次OnNavigatedTo都判斷Url中是否有id這個參數,如果有就跳到了page3,不幸的是,在page3裡面按後退鍵,這個Url還是之前的帶參數的Url。

  解決這個問題,可以加一行代碼解決:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);

if (NavigationContext.QueryString.ContainsKey("id"))
{
string id= NavigationContext.QueryString["id"];
if (id=="1")
     {
    NavigationContext.QueryString.Remove("id");
NavigationService.Navigate(new Uri("page3.xaml",UriKind.Relative));
     }
}
}

  NavigationContext.QueryString.Remove("id");這個語句可以把當前的Url中的某個參數移除掉。這樣再在page3裡面後退回page2,就能停在page2了。

 

  NavigationContext.QueryString.Remove("")實際使用需求情形:為了避免OnNavigatedTo重複處理同一問題,以及上面說的的這種頁面跳轉情況(當然也可以用其他的方法避免這種複雜的跳轉)。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.