2011-08-02 54 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

我禁用了转换并且没有改变。数据透视选择更改事件触发,但屏幕仍然卡住。 –