开始和后退按钮快速连续按下WP7

Mar*_*ero 5 silverlight windows-phone-7

我在一篇类似的帖子中提出了这个问题,但从那以后出现了重大更新,但仍然没有结果,所以我将尝试用更新的信息重新提问.

基本上我有一个包含4个透视项的数据透视图.如果我创建了我按下Windows键的场景,然后快速按下后退键,我的应用程序将重新打开而不重建(这是预期的结果).应用程序的功能就在那里.我可以按应用栏按钮等.

什么不起作用是枢轴项目被冻结.如果我在Pivot项目A上并且我快速按下开始和返回按钮我会回到Pivot项目A.如果我尝试切换Pivot项目,屏幕不会更新,它在"透视项目A"上"冻结"但功能枢轴项目B在那里.(我知道这是因为现在显示了Pivot Item B的应用栏图标).

我已经阅读了很多关于正确的墓碑场景以及如何解决这个问题的文章.我的数据正确地被逻辑删除,并且在重新激活时,逻辑删除的数据有效.没有对象为空,所以我没有任何异常被抛向我.

我检查是否需要重新加载Main ViewModel(在这种情况下我不需要这样,因此最初创建的UI元素不会被重新创建).

然而,如果应用程序被重建,那么解决问题的方法是什么.让我说我从我的应用程序进入市场,让它完成加载并按回来,我的应用程序将刷新并正常工作,因为它正确停用和重建istelf.我不依赖构造函数完成所有工作,因此我不会错过任何未在窗口/后退按钮场景中触发时未设置的关键元素.

有谁知道为什么我的屏幕不会更新?

构造函数/加载事件/导航到事件

    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);
    }
Run Code Online (Sandbox Code Playgroud)

小智 0

我找到了答案。由于我打开了一个媒体元素(播放/暂停),并且我正在实施非常快速地点击 Windows 键和后退按钮的“非逻辑删除”方法,因此媒体元素源已损坏。即使我重置了这个源,显然它也可以被忽略并且无法正常运行。我所要做的就是向应用程序停用处理程序添加一行代码。

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