Кнопки Пуск и Назад нажаты в быстрой последовательности WP7 - PullRequest
5 голосов
/ 02 августа 2011

Я задавал этот вопрос в аналогичном посте, но с тех пор произошли существенные обновления, но все еще нет результатов, поэтому я попытаюсь повторно задать вопрос с обновленной информацией.

По сути, у меня есть сводный вид с 4 пунктами. Если я создаю сценарий, в котором я нажимаю клавишу Windows, а затем быстро нажимаю клавишу «Назад», мое приложение будет вновь открыто без восстановления (это ожидаемый результат). Функциональность приложения есть. Я могу нажимать кнопки панели приложения и т. Д.

Что не работает, так это то, что сводные элементы заморожены. Если я был в элементе Pivot A и быстро нажимаю кнопку «Пуск» и «Назад», я возвращаюсь к элементу Pivot A. Если я пытаюсь переключать элементы Pivot, экран не обновляется, он «завис» на элементе A Pivot, НО функциональность Опорный пункт B есть. (Я знаю это, потому что теперь отображаются значки панели приложения для сводного элемента B).

Я прочитал много статей о правильных сценариях захоронения и о том, как решить эту проблему. Мои данные правильно захоронены, и после повторной активации данные работают. Ни один объект не является нулевым, поэтому я не получаю никаких исключений.

Я проверяю, нужно ли перезагрузить Main ViewModel (в этом случае мне это не нужно, поэтому создаваемые изначально элементы пользовательского интерфейса не создаются).

Что устраняет проблему, если приложение реконструируется. Допустим, я захожу на рынок из своего приложения, позволяю ему завершить загрузку и нажать обратно. Мое приложение будет обновлено и будет работать нормально, поскольку оно должным образом деактивировано и восстановлено 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 голосов
/ 03 августа 2011

Используете ли вы переходы из инструментария?
Они определены в XAML?

Если так, то это может быть проблемой. В следующей версии исправлена ​​ошибка.
Решением на данный момент является удаление переходов или определение их в коде.

0 голосов
/ 03 августа 2011

Я нашел ответ. Поскольку у меня был медиа-элемент, открытый (воспроизведение / пауза), и я реализовывал «не захороненный» способ очень быстрого нажатия клавиш Windows и кнопки «назад», источник медиа-элемента был поврежден. Несмотря на то, что я сбросил этот источник, он может игнорироваться и работать неправильно. Все, что мне нужно было сделать, это добавить строку кода в обработчик деактивированного приложения.

    private void Application_Deactivated(object sender, DeactivatedEventArgs e)
    {
        App.MainAudioPlayer.Source = null; //(only showing line added)
    }
0 голосов
/ 02 августа 2011

Поведение, которое вы описываете, похоже, связано исключительно с тем, как вы манипулируете данными внутри и строите свой макет.Я проверил это как в эмуляторе, так и на нескольких физических устройствах, которые выдают нормальный вывод (даже когда привязаны к модели представления).

Попробуйте создать новое приложение на основе Pivot (без ваших данных - простоиспользуя шаблон по умолчанию) и посмотрите, не исчезнет ли проблема.Также стоит упомянуть - вы тестируете на устройстве или в эмуляторе?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...