Анимация на странице застревает при обратной навигации - PullRequest
2 голосов
/ 08 декабря 2011

Приложение для Windows Phone 7.5.

Дизайнер создал Home.xaml в Blend с 3 изображениями (пункт меню) с анимацией раскадровки. Анимация очень простая. Каждое изображение немного увеличивается и возвращается к своему нормальному размеру один за другим.

Отлично работает при начальной загрузке. Теперь нажатие на одно изображение переводит меня на другую страницу.

Проблема: Теперь, когда я нажимаю кнопку «назад» (аппаратное обеспечение), я перехожу на свой Home.xaml со страницы навигации, одно изображение немного наклонено, как если бы оно было в середине анимации. Анимация в действительности подходит для всех кнопок в цикле, но одно из изображений (это случайное включение) застревает. Теперь это поведение является случайным, но может повторяться почти 95% времени.

Я не уверен, как анимация вписывается в цикл навигации по страницам. Я попытался явно остановить анимацию, как показано ниже в OnNavigatedFrom

protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
            sbBtn1.Stop();
            sbBtn2.Stop();
            sbBtn3.Stop();
            base.OnNavigatedFrom(e);
}

Это своего рода устранение исходной проблемы, но затем возникает другая проблема. При обратной навигации первое изображение из 3 (это то, которое сначала анимируется при навигации по страницам) действует так, как будто оно немного увеличивается.

Edit:

Я выяснил проблему уменьшения масштаба первого изображения. Он использовал 0,7 шкалы / год вместо 0,75.

Если кто-нибудь может указать мне правильное направление, как справиться с этой анимацией, пожалуйста.

Вот образец , который я создал, который повторяет проблему. Получите zip-файл AnimationIssue . Дайте мне знать, если вы не можете загрузить образец.

Как воспроизвести:

1: Нажмите на одно из изображений, чтобы перейти на следующую страницу. 2: Затем нажмите кнопку аппаратного возврата. Вы увидите, о чем я говорю. Если нет, попробуйте выполнить шаги 1 и 2 два или три раза.

Дополнительно:

1: ЕСЛИ вы комментируете остановочные вызовы, как я уже упоминал выше, следуйте инструкциям выше, но на этот раз обратите внимание на первое изображение Пустыни. Вы увидите небольшое увеличение.

Надеюсь, кто-нибудь сможет указать мне правильное направление. Спасибо.

Последний вопрос Так что же не так в моей оригинальной версии? Правильно ли я делаю это, чтобы остановить анимацию в OnNavigatedFrom или я должен сделать что-то еще?

Я также думаю о явном вызове sbBtn1 / 2/3. Begin на странице Loaded вместо использования триггеров в .xaml.

Ответы [ 2 ]

1 голос
/ 21 декабря 2011

У меня был один и тот же глюк анимации в одном из моих приложений.

Таким образом, единственный обходной путь - Stop всей анимации и повторное использование Begin всякий раз, когда выполняется переход к Home.xaml. Попробуйте это:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
     base.OnNavigatedTo(e);

     //Stop All the animations
     sbBtn1.Stop(); 
     sbBtn2.Stop(); 
     sbBtn3.Stop(); 

     //Start them all over again
     sbBtn1.Begin(); 
     sbBtn2.Begin(); 
     sbBtn3.Begin(); 
}
0 голосов
/ 25 января 2012

Я закончил с перемещением кода для остановки анимации отдельным методом.

Было не только достаточно остановить анимацию, но и сбросить некоторые свойства, на которых была выполнена анимация.

OnNavigatedTo и From не просто вызываются при навигации по элементам, но и в случае, если, например, ваше приложение прерывается телефонным звонком или телефон переходит на экран блокировки.

Я добавил переменную, чтобы отслеживатьусловия при вызове OnNavigatedTo / From и в зависимости от случая, когда я вызывал свой метод сброса пользовательской анимации.

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