2011-08-02 142 views
5

開始和後退按鈕我問這個問題在一個類似的職位但此後出現了顯著的更新,但仍然沒有結果,所以我會嘗試用更新的信息來重新問這個問題。快速連續按下WP7

基本上我有一個樞軸視圖與4個樞軸項目。如果我創建了我點擊Windows鍵的場景,然後快速按下後退鍵,我的應用程序將重新打開而不重新構建(這是預期的結果)。應用程序的功能在那裏。我可以按應用程序欄按鈕等

什麼不工作是樞軸項目被凍結。如果我在數據透視項目A上,並且我快速按下開始和後退按鈕,則會返回到數據透視項目A.如果我嘗試切換數據透視項目,則屏幕不會更新,而是在數據透視項目A上「凍結」樞軸項目B在那裏。 (我知道這是因爲數據透視項目B的應用程序欄圖標現在正在顯示)。

我已經閱讀適當立碑方案以及如何解決這個問題的文章。我的數據被正確地墓碑化,並且在重新激活時,墓碑化的數據起作用。沒有任何對象是空的,所以我沒有任何例外。

我檢查,看看我是否需要重新加載主視圖模型(所以最初創建的UI元素不被重新創建我不需要在這種情況下)。

但是,如果應用程序重新構建,那麼解決問題的方法是什麼?比方說,我從我的應用程序進入市場,讓它完成加載並按回,我的應用程序將刷新並正常工作,因爲它正確地停用和重建istelf。我不依賴構造函數來完成所有的工作,所以當我們不在windows/back按鈕場景中觸發時,我不會錯過任何未設置的關鍵元素。

有沒有人有任何想法爲什麼我的屏幕不會更新?

構造函數/加載事件/上導航到事件

public MainPage() 
    { 
     InitializeComponent(); 
     this.Loaded += new RoutedEventHandler(MainPage_Loaded); 
    } 
    private void MainPage_Loaded(object sender, RoutedEventArgs e) 
    { 
     if (App.firstTimeLoading == true) 
     { 
      App.firstTimeLoading = false; 
     } 
     BuildApplicationBar(); 
    } 

    protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     this.DataContext = App.ViewModel; 
     App.viewIdentifier = StringResource.MainPageView; 

     if (!App.ViewModel.IsDataLoaded) 
     { 
      App.ViewModel.LoadData();     

      String bookTitle; 
      App.Parser.appBookInfoDict.TryGetValue(CPlayerInventoryKeys.kInventoryKeyTitleShortTitle, out bookTitle); 
      PivotBackground.Title = bookTitle.ToUpper(); 

      CreatePivotItems(); 
     } 
     if (App.playerController.chapterPlayer.Source == null) 
      App.restoreStateClass.RestoreState(); 

     //applies the proper background image 
     if (App.isDarkTheme) 
     { 
      BitmapImage bitmapImage = new BitmapImage(new Uri(StringResource.PanoramaBlackImage, UriKind.Relative)); 
      BackgroundImage.ImageSource = bitmapImage; 
      BackgroundImage.Opacity = .85; 
     } 
     else 
     { 
      BitmapImage bitmapImage = new BitmapImage(new Uri(StringResource.PanoramaWhiteImage, UriKind.Relative)); 
      BackgroundImage.ImageSource = bitmapImage; 
      BackgroundImage.Opacity = .5; 
     } 

     if (App.firstTimeLoading == false && PivotBackground.SelectedItem != SuggestedPivotItem) 
      BuildApplicationBar(); 
     else if (PivotBackground.SelectedItem == SuggestedPivotItem) 
     { 
      BuildMarketPlaceApplicationBar(); 
     } 
     base.OnNavigatedTo(e); 
    } 
+0

你有,你可以分享一個完整的攝製? –

+0

我更新了一些相關代碼,仍然一步一步地調試這個,雖然 –

回答

0

我找到了答案。由於我打開了一個媒體元素(播放/暫停),並且我正在實施非常迅速地按下Windows鍵和後退按鈕的「非墓碑式」方法,所以媒體元素源已損壞。即使我重置這個來源,顯然它可以被忽略,並且不能正常工作。我所要做的只是將一行代碼添加到Application Deactivated處理程序中。

private void Application_Deactivated(object sender, DeactivatedEventArgs e) 
    { 
     App.MainAudioPlayer.Source = null; //(only showing line added) 
    } 
0

您所描述的行爲似乎單獨與你在內部處理數據和建設佈局的方式。我在模擬器和幾個物理設備上都測試了這兩個設備,兩者都產生正常輸出(即使綁定到視圖模型時)。

嘗試創建一個新的基於透視的應用程序(不包括所有的數據 - 只使用默認模板),看看問題是否仍然存在。另外值得一提的是 - 您是在設備上還是在仿真器上測試?

+0

我想試試我們昨晚談論的一些事情。我記得不過,即使是我的所有視圖模型綁定主頁和問題的評論仍然存在。 –

+0

有趣的是,我已經解決了我的觀點之一的問題,這是個好消息!奇怪的部分是主視圖。在OnNavigatedTo事件中,我設置了一個this.Loaded事件,並且在它運行所有其他功能之後,它從不會觸發主視圖的加載事件。 –

+0

加載事件是否實際連線? –

0

您是否正在使用工具包中的轉換?
它們是否在XAML中定義?

如果這樣可能是問題。有一個bug在下一個版本中被修復。
現在的解決方案是刪除轉換或在代碼中定義它們。

+0

我正在使用工具包的轉換。例如 RootFrame = new Microsoft.Phone.Controls.TransitionFrame(); 是的,他們在xaml中定義,虐待看看現在刪除它們是什麼 –

+0

我禁用了轉換並且沒有改變。數據透視選擇更改事件觸發,但屏幕仍然卡住。 –