Использование Obscure и UnObscure ... Я правильно это делаю? - PullRequest
0 голосов
/ 24 декабря 2011

Приложение WP 7.5. У меня есть две анимации раскадровки - одна на изображении, а другая на тексте.

Issue1: Когда я перехожу на следующую страницу и возвращаюсь, изображение и текст мигает.

Solution1: Поэтому я добавил OnNavigateFrom и explicity Остановить анимацию, а также сбросить все свойства, участвующие в анимации, до 0.

Issue2: Теперь, скажем, экран переходит в режим блокировки, и когда я его разблокирую, так как я установил непрозрачность одного из моих элементов в 0 в OnNavigatedFrom, элемент скрыт, который фактически должен быть видим пользователь переходит на следующую страницу.

Solution2: Я обработал обработчик Obscured и UnObscured, как показано ниже в коде, и добавил флаг, чтобы увидеть, будет ли приложение переходить в режим затемнения, не останавливать анимацию и не сбрасывать свойства.

public class Page2 :PhoneApplicationPage
    {
         private bool _isObscured = false;
         public Page2()
        {
            (Application.Current as App).RootFrame.Obscured += OnObscured;
            (Application.Current as App).RootFrame.Unobscured += OnUnobscured;
            InitializeComponent();
        }

        protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
        {
            //Stop animations and reset properties only if not going to obscure mode.
            if (!_isObscured)
            {
                //stop animaiton
                Storyboard1.Stop();
                Storyboard2.Stop();
                //Reset all transform properties to 0
                Text1.Opacity = 0;
                Image1.RenderTransform.SetValue(CompositeTransform.ScaleXProperty, 0.0);
                Image1.RenderTransform.SetValue(CompositeTransform.ScaleYProperty, 0.0);
            }
            base.OnNavigatedFrom(e);
        }

        void OnObscured(object sender, ObscuredEventArgs e)
        {
            Storyboard1.Pause();
            Storyboard2.Pause();
            _isObscured = true;
        }

        void OnUnobscured(object sender, EventArgs e)
        {
            Storyboard1.Resume();
            Storyboard2.Resume();
            _isObscured = true;
        }
    }

Вопрос : Это правильный путь или есть лучший путь? Может ли быть проблема с сертификацией для этого?

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 24 декабря 2011

Более простой способ - добавить логическое свойство IsLeave и установить его в значение true в событии щелчка, которое вызывает метод NavigateTo.Кроме того, останавливайте анимацию в той же функции.

Чем вы можете быть уверены, что при возвращении свойство IsLeave говорит, что вы должны выполнять анимацию или нет.

private bool IsLeave = false;

 OnNavigatedTo()
 {
      if (IsLeave)
      {
           //We come back. Reset animations
           IsLeave = false;
      }
 }

.

 ClickEvent()
 {
      IsLeave = true;
      //Permorm all you need with animations. We leave this page
      NavigationService.NavigateTo()
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...