Szukaj…


Wprowadzenie

Gdy tylko aplikacja ma kilka stron / ekranów, potrzebny jest sposób nawigacji między nimi. W aplikacjach UWP nawigacja obsługiwana jest za pomocą kontrolki [Frame] [1]. Wyświetla instancje [Strona] [2], obsługuje nawigację do nowych stron i przechowuje historię nawigacji do tyłu i do przodu [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

Utwórz ramkę

Ramka jest tworzona tak jak wszystkie inne formanty:

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

Nawigowane / nawigowane zdarzenia można następnie przechwycić, aby anulować nawigację lub pokazać / ukryć przycisk Wstecz.

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);  
}

Przejdź do najnowszej strony

Aby przejść do najnowszej strony, możemy użyć metody Navigate () z ramki.

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

gdzie contentRoot jest instancją Frame, a MyPage kontrolką dziedziczącą ze strony

W MyPage metoda OnNavigatedTo () zostanie wywołana po zakończeniu nawigacji (tj. Kiedy użytkownik wejdzie na stronę), co pozwoli nam uruchomić lub sfinalizować ładowanie danych strony. Metoda OnNavigatedFrom () zostanie wywołana podczas opuszczania strony, umożliwiając nam zwolnienie tego, co ma zostać zwolnione.

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
    }
}

Potwierdzanie żądania nawigacji za pomocą 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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow