Created
December 12, 2016 22:21
-
-
Save owen2/11293228c7238af0a810af228644df14 to your computer and use it in GitHub Desktop.
Auto-Implemented Back Button Windows 10
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Stole this from http://devcenter.wintellect.com/jprosise/handling-the-back-button-in-windows-10-uwp-apps | |
sealed partial class App : Application | |
{ | |
public App() | |
{ | |
this.InitializeComponent(); | |
this.Suspending += OnSuspending; | |
} | |
protected override void OnLaunched(LaunchActivatedEventArgs e) | |
{ | |
Frame rootFrame = Window.Current.Content as Frame; | |
// Do not repeat app initialization when the Window already has content, | |
// just ensure that the window is active | |
if (rootFrame == null) | |
{ | |
// Create a Frame to act as the navigation context and navigate to the first page | |
rootFrame = new Frame(); | |
rootFrame.NavigationFailed += OnNavigationFailed; | |
rootFrame.Navigated += OnNavigated; | |
if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) | |
{ | |
// TODO: Load state from previously suspended application | |
} | |
// Place the frame in the current Window | |
Window.Current.Content = rootFrame; | |
// Register a handler for BackRequested events and set the | |
// visibility of the Back button | |
SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested; | |
SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = | |
rootFrame.CanGoBack ? | |
AppViewBackButtonVisibility.Visible : | |
AppViewBackButtonVisibility.Collapsed; | |
} | |
if (rootFrame.Content == null) | |
{ | |
// When the navigation stack isn't restored navigate to the first page, | |
// configuring the new page by passing required information as a navigation | |
// parameter | |
rootFrame.Navigate(typeof(MainPage), e.Arguments); | |
} | |
// Ensure the current window is active | |
Window.Current.Activate(); | |
} | |
void OnNavigationFailed(object sender, NavigationFailedEventArgs e) | |
{ | |
throw new Exception("Failed to load Page " + e.SourcePageType.FullName); | |
} | |
private void OnNavigated(object sender, NavigationEventArgs e) | |
{ | |
// Each time a navigation event occurs, update the Back button's visibility | |
SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = | |
((Frame)sender).CanGoBack ? | |
AppViewBackButtonVisibility.Visible : | |
AppViewBackButtonVisibility.Collapsed; | |
} | |
private void OnSuspending(object sender, SuspendingEventArgs e) | |
{ | |
var deferral = e.SuspendingOperation.GetDeferral(); | |
// TODO: Save application state and stop any background activity | |
deferral.Complete(); | |
} | |
private void OnBackRequested(object sender, BackRequestedEventArgs e) | |
{ | |
Frame rootFrame = Window.Current.Content as Frame; | |
if (rootFrame.CanGoBack) | |
{ | |
e.Handled = true; | |
rootFrame.GoBack(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment