Sök…


Introduktion

Så snart applikationen har flera sidor / skärmar krävs ett sätt att navigera bland dem. Med UWP-applikationer hanteras navigeringen av kontrollen [Frame] [1]. Den visar inställningar [Sida] [2], stöder navigeringen till nya sidor och håller en historik för både bakåt och framåt navigering [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

Skapa ram

En ram skapas som alla andra kontroller:

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

De navigerade / navigerande händelserna kan sedan avlyssnas för att avbryta navigeringen eller visa / dölja bakåtknappen.

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

För att navigera till en nyaste sida kan vi använda Navigera () -metoden från ramen.

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

där contentRoot är Frame- instansen och MyPage en kontroll som ärver från Page

MyPage kommer metoden OnNavigatedTo () att kallas när navigeringen är klar (dvs. när användaren kommer in på sidan) så att vi kan utlösa eller slutföra laddningen av sidinformationen. Metoden OnNavigatedFrom () kommer att anropas när vi lämnar sidan så att vi kan släppa det som måste släppas.

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

Bekräfta navigeringsbegäran med 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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow