Поиск…


Вступление

В скором времени, когда приложение имеет несколько страниц / экранов, необходим способ навигации между ними. С приложениями UWP навигацию обрабатывает элемент управления [Frame] [1]. Он отображает экземпляры [Page] [2], поддерживает навигацию на новые страницы и сохраняет историю как для обратной и прямой навигации [1]: https://msdn.microsoft.com/en-us/library/windows/apps/ windows.ui.xaml.controls.frame.aspx [2]: https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.page.aspx

Создать фрейм

Кадр создается как любые другие элементы управления:

<Frame x:Name="contentRoot"
       Navigated="OnNavigated"
       Navigating="OnNavigating" />

Затем навигационные / навигационные события могут быть перехвачены, чтобы отменить навигацию или показать / скрыть кнопку «Назад».

private void OnNavigating(object sender, NavigatingCancelEventArgs e)
{
    if(contentRoot.SourcePageType  == e.SourcePageType && m_currentPageParameter == e.Parameter)
   {
       // we are navigating again to the current page, we cancel the navigation
       e.Cancel    = true;
   }
}

private void OnNavigated(object sender, NavigationEventArgs e)
{
    // user has navigated to a newest page, we check if we can go back and show the back button if needed.
    // we can also alter the backstack navigation history if needed
    SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = (contentRoot.CanGoBack ? AppViewBackButtonVisibility.Visible : AppViewBackButtonVisibility.Collapsed);  
}

Перейдите на новую страницу

Чтобы перейти на новую страницу, мы можем использовать метод Navigate () из фрейма.

contentRoot.Navigate(typeof(MyPage), parameter);

где contentRoot - это экземпляр Frame и MyPage - элемент управления, наследующий от страницы

В MyPage метод OnNavigatedTo () вызывается после завершения навигации (т.е. когда пользователь войдет на страницу), что позволяет нам запускать или завершать загрузку данных страницы. Метод OnNavigatedFrom () будет вызываться при выходе из страницы, что позволит нам освободить то, что должно быть выпущено.

public class MyPage : Page
{
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        // the page is now the current page of the application. We can finalized the loading of the data to display
    }

    protected override void OnNavigatedFrom(NavigationEventArgs e)
    {
        // our page will be removed from the screen, we release what has to be released
    }
}

Подтверждение навигационного запроса с помощью OnNavigatingFrom

private bool navigateFlag = false;

protected async override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
    base.OnNavigatingFrom(e);

    if (!navigateFlag)
        {
            e.Cancel = true;

            var dialog = new MessageDialog("Navigate away?", Confir,);
            dialog.Commands.Add(new UICommand("Yes", null, 0));
            dialog.Commands.Add(new UICommand("No", null, 1);

            dialog.CancelCommandIndex = 1;
            dialog.DefaultCommandIndex = 0;

            var result = await dialog.ShowAsync();

            if (Convert.ToInt16(result.Id) != 1)
            {
                navigateFlag= true;
                this.Frame.Navigate(e.SourcePageType);
            }
           
        }

    }


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow