首页 > 代码库 > UWP 应用中的Back button(TitleBar) 的处理

UWP 应用中的Back button(TitleBar) 的处理

技术分享

后退按钮是一项系统提供的 UI 提示,可以在后退堆栈或用户导航历史记录中支持向后导航。

用起来其实也是很简单的,只需要在App.xaml.cs 中修改(添加)如下红色代码,便可实现。。

    sealed partial class App : Application    {        /// <summary>        /// 初始化单一实例应用程序对象。这是执行的创作代码的第一行,        /// 已执行,逻辑上等同于 main() 或 WinMain()。        /// </summary>        public App()        {            this.InitializeComponent();            this.Suspending += OnSuspending;        }        /// <summary>        /// 在应用程序由最终用户正常启动时进行调用。        /// 将在启动应用程序以打开特定文件等情况下使用。        /// </summary>        /// <param name="e">有关启动请求和过程的详细信息。</param>        protected override void OnLaunched(LaunchActivatedEventArgs e)        {            Frame rootFrame = Window.Current.Content as Frame;            // 不要在窗口已包含内容时重复应用程序初始化,            // 只需确保窗口处于活动状态            if (rootFrame == null)            {                // 创建要充当导航上下文的框架,并导航到第一页                rootFrame = new Frame();                rootFrame.NavigationFailed += OnNavigationFailed;                rootFrame.Navigated += RootFrame_Navigated;                if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)                {                    //TODO: 从之前挂起的应用程序加载状态                }                // 将框架放在当前窗口中                Window.Current.Content = rootFrame;            }            if (e.PrelaunchActivated == false)            {                if (rootFrame.Content == null)                {                    // 当导航堆栈尚未还原时,导航到第一页,                    // 并通过将所需信息作为导航参数传入来配置                    // 参数                    rootFrame.Navigate(typeof(MainPage), e.Arguments);                }                //注册 backbutton 事件                SystemNavigationManager.GetForCurrentView().BackRequested += App_BackRequested;                // 确保当前窗口处于活动状态                Window.Current.Activate();            }        }        // 每次导航事件发生时,更新返回键的可见信息        private void RootFrame_Navigated(object sender, NavigationEventArgs e)        {            SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility =                ((Frame)sender).CanGoBack ?                AppViewBackButtonVisibility.Visible :                AppViewBackButtonVisibility.Collapsed;        }        //titleBar 返回事件        private void App_BackRequested(object sender, BackRequestedEventArgs e)        {            Frame rootFrame = Window.Current.Content as Frame;            if (rootFrame == null)            {                return;            }            //e.Handled 该值指示应用程序是否执行了请求的返回导航功能            if (rootFrame.CanGoBack && e.Handled == false)            {                e.Handled = true;                rootFrame.GoBack();            }        }        /// <summary>        /// 导航到特定页失败时调用        /// </summary>        ///<param name="sender">导航失败的框架</param>        ///<param name="e">有关导航失败的详细信息</param>        void OnNavigationFailed(object sender, NavigationFailedEventArgs e)        {            throw new Exception("Failed to load Page " + e.SourcePageType.FullName);        }        /// <summary>        /// 在将要挂起应用程序执行时调用。  在不知道应用程序        /// 无需知道应用程序会被终止还是会恢复,        /// 并让内存内容保持不变。        /// </summary>        /// <param name="sender">挂起的请求的源。</param>        /// <param name="e">有关挂起请求的详细信息。</param>        private void OnSuspending(object sender, SuspendingEventArgs e)        {            var deferral = e.SuspendingOperation.GetDeferral();            //TODO: 保存应用程序状态并停止任何后台活动            deferral.Complete();        }    }}

Link:

MSDN:https://msdn.microsoft.com/en-us/library/windows/apps/dn439322.aspx

参考博客:http://devcenter.wintellect.com/jprosise/handling-the-back-button-in-windows-10-uwp-apps

UWP 应用中的Back button(TitleBar) 的处理