Работа с анимацией при переходах страниц в UWP - PullRequest
0 голосов
/ 09 марта 2020

В моем приложении я использую события OnNavigatingFrom и OnNavigatedTo, чтобы изменить состояние моего просмотра, например, сбросить состояние просмотра до исходного. Это вызывает проблемы с навигацией - когда пользователь нажимает кнопку, он видит мигание страницы в исходном состоянии, когда он выполняет анимацию выхода. Как мне кодировать свой пользовательский интерфейс, чтобы справиться с этим?

Поток страниц:

  1. OnNavigatingTo называется
  2. Пользователь выполняет работу на странице
  3. Пользователь нажимает кнопку для перемещения
  4. OnNavigatingFrom вызывается
  5. Страница сбрасывает пользовательский интерфейс в исходное состояние
  6. ContentFrame начинает воспроизводить анимацию вывода (пользователь кратко видит состояние страницы 1.)
  7. ContentFrame переключается на новую страницу

Repro: https://github.com/ShadowDancer/uwp.transitions.repro.git

1 Ответ

0 голосов
/ 10 марта 2020

В UWP переходы страниц по умолчанию имеют анимацию подключения. Если эта анимация подключения вас беспокоит, вы можете попробовать изменить ее.

myFrame.Navigate(typeof(Page2), null, new SuppressNavigationTransitionInfo());

Если вы хотите узнать больше об анимации подключения страницы, ознакомьтесь с этим документом: Переходы страницы .


Обновление

Я проверил код вашего проекта. В OnNavigatingFrom вы сбрасываете состояние страницы, что приводило к изменению состояния во время анимации соединения страницы.

Функционально я предлагаю вам написать код для перезаписи состояния страницы в событии OnNavigatedTo, переписывать состояние страницы каждый раз, когда вы переходите на страницу, без необходимости прослушивать событие OnNavigatingFrom.

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    SetState(false);
    base.OnNavigatedTo(e);
}

Обновление

Там это еще один метод, который заключается в задержке изменения состояния. Состояние переключения после завершения анимации страницы

protected async override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
    await Task.Delay(500);
    SetState(false);
    base.OnNavigatingFrom(e);
}
...