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