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

时间:2011-08-02 00:40:10

标签: silverlight windows-phone-7

我在一篇类似的帖子中提到了这个问题但是从那时起已经有了重大的更新,但仍然没有结果,所以我将尝试用更新的信息重新提问。

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

什么不起作用是枢轴项目被冻结。如果我在Pivot项目A上并且我快速按下开始和返回按钮我将返回到Pivot项目A.如果我尝试切换Pivot项目,屏幕不会更新,它在“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);
    }

3 个答案:

答案 0 :(得分:0)

您所描述的行为似乎仅与您在内部操纵数据和构建布局的方式有关。我在模拟器和几个物理设备上测试了这两个,两者都产生正常输出(即使绑定到视图模型)。

尝试创建一个新的基于数据透视的应用程序(没有所有数据 - 只使用默认模板)并查看问题是否仍然存在。另外值得一提 - 您是在设备上还是在模拟器中进行测试?

答案 1 :(得分:0)

您是否正在使用工具包中的转换?
它们是在XAML中定义的吗?

如果是这样可能是问题。有一个错误在下一个版本中修复。
现在的解决方案是删除转换或在代码中定义它们。

答案 2 :(得分:0)

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

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