2011-08-18 93 views
3

在當前發佈的WP7版本中,您無法對頁面堆棧進行編程控制。當按下後退按鈕時跳過一個頁面,WP7

我從A開始,轉到B,然後C. B是新項目的數據輸入頁面,所以從CI返回想從邏輯上着陸A.目前,我在B上監聽來自C並迫使另一個回到A.然而,事件不會很快發生,足以阻止頁面顯示在屏幕上。

A - >乙 - 「ç

Ç - >甲

A是頂層列表頁面。 B是新的項目頁面。 C是項目詳細信息頁面。

這隻發生在目前爲止的一種形式中,所以我的解決方法是在我想跳過的頁面中覆蓋OnNavigatedTo,然後以編程方式調用「返回」。但是,這具有短暫顯示頁面並立即導航的不良影響。

  • 有沒有一種可行的方法來阻止閃爍?
  • 我的解決方法應該是完全控制頁面導航,包括退後?這會讓頁面堆棧處於一種奇怪的狀態,但是如果我控制所有的導航,那將會對用戶隱藏起來。

我知道Mango中有一項新功能,可以以編程方式從頁面堆棧中彈出頁面,但我很想知道是否在發佈的版本中有問題的解決方案。

對此的另一個動機是我不知道哪個版本最適合定位,最新的版本,還是剛剛適用於該應用的版本。目前我堅持現場版。

回答

3

我已經通過在跳過的時間內使根框架透明來停止閃爍。這個例子不是直接從我的代碼。

首先想跳過,覆蓋OnNavigatedTo和測試,看看你都來自網頁上(這是我的代碼變得具體,我跟蹤我所在的地方):

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    // If I've come from page C, go back again. 
    NavigationService.GoBack(); 
} 

其次,在主要的App.xaml中。CS註冊Navigating的事件處理程序(我把它放在public App()構造函數):

RootFrame.Navigating += RootFrame_Navigating; 

最後,充實他們出去隱藏幀,並再次顯示它的翻斗的持續時間:

private bool _skipped; 

    private void RootFrame_Navigated(object sender, NavigationEventArgs e) 
    { 
     RootFrame.Opacity = 100; 
     RootFrame.Navigated -= RootFrame_Navigated; 
    } 

    private void RootFrame_Navigating(object sender, NavigatingCancelEventArgs e) 
    { 
     if (_skipped) 
     { 
      _skipped = false; 
      RootFrame.Navigated += RootFrame_Navigated; 
     } 

     if (e.NavigationMode == NavigationMode.Back && 
      e.Uri.OriginalString.Contains("ThePage.xaml")) 
     { 
      RootFrame.Opacity = 0; 
      _skipped = true; 
     } 
    } 

的代碼,以確定何時讓頁面透明也是我的實際代碼不同,但我已經加入到答案說明的實現。這與在另一個答案中鏈接的配方中的代碼幾乎相同,但不涉及需要使用第三方DLL。

我提供我自己的答案,因爲我已經看到了之前在其他的答案中提供的來源,但從來沒有注意過的代碼隱藏根框架。我不使用非線性導航服務,只爲框架的透明度的代碼片段(我並不需要它來檢測圓形導航,因爲我很清楚的設計選擇我讓應用中,可以發現他們自己的: - )

這足以作爲(目前)一個情況下,我有我需要跳過頁面回去時就沒有意義了一種解決方法。我想在Mango問世的時候,我會把最好的目標放在最新的版本上,所以這段代碼很快就會失效。

來源:

+0

+1 - 感謝您的後續答覆。 – keyboardP

1

芒果之前沒有辦法做到這一點,除非你已經知道閃爍的方式。

在芒果,你可以使用NavigationService.RemoveBackEntry

這是一個糟糕的應用程序設計問題,而不是其他任何問題。你不應該要求立即頁面的任何東西。

您的解決方法應該是設計一個不需要任何即時頁面的應用程序結構。

+0

怎麼會這樣?頁面A是我的主頁,用戶點擊「新建項目」,B是新的項目輸入頁面,帶你到C,該項目的列表頁面......壞的設計在哪裏?我也明白,沒有支持的方法做到這一點(因此我的解決辦法的談話),並且我知道芒果的支持...... –

+0

對不起,你是什麼意思的「即時頁面」? –

+0

爲什麼用戶不想返回到「新條目」頁面呢?如果頁面B是創建/類似對話框的頁面,則應在創建後將用戶返回到「主頁」屏幕,而不是將其重定向到列表頁面。如果用戶想要查看列表,他們應該在您的主屏幕上,或者用戶應該親自導航。 –

3

關於解決循環導航問題,您應該閱讀this blog post,您可以下載演示非線性導航的this recipe code

+0

你以前用過這個嗎?看來要做的就是回到頁面,我已經有了這些代碼。它是否顯示快速支持的頁面? –

+0

它似乎使RootFrame透明。 –

+0

不,我從來不需要它,但是我已經看到它爲您描述的場景提出了很多次。 – keyboardP