覆盖Appx.cs中的后台导航设置

有点卡在这里 我有一个分割视图的应用程序,当按住住在Appx.cs中的backkey时,会有向后导航的事件。

我想在splitviews内容页面中导航的页面之一中定义一个不同的动作(例如,当某个元素可见以closures该元素时),但是该应用总是遵循appx.cs中设置的事件,并忽略该事件在内容框架中加载的页面中。 这是appx.cs中的代码:

protected async override void OnLaunched(LaunchActivatedEventArgs e) { // Do not repeat app initialization when the Window already has content, // just ensure that the window is active if (Window.Current.Content == 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 = new MainPage(_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; } } private void OnBackRequested(object sender, BackRequestedEventArgs e) { if (_rootFrame != null && _rootFrame.CanGoBack) { e.Handled = true; _rootFrame.GoBack(); } } 

以下是加载到splitviews内容窗格中的一个页面中的代码:

 public CalcOutputPage() { this.InitializeComponent(); // add page specific handling of back navigation when entering this page SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested; } // page specific back button navigation private void OnBackRequested(object sender, BackRequestedEventArgs e) { if (MobileStackPanel.Visibility == Visibility.Visible) { MobileStackPanel.Visibility = Visibility.Collapsed; e.Handled = true; } else { e.Handled = false; } } 

但是这不起作用。 如果它的第一页加载到导航堆栈中,那么它就可以工作,但是在所有其他时候,应用程序都遵循appx.cs中的导航指示

所以澄清:

  • Appx.cs中的OnBackRequested方法正在处理我的应用程序中的后退导航。
  • 我有一个页面(让我们称之为PageTwo.xaml)在splitview内容窗格中打开。
  • 在PageTwo.xaml中,我想要按下OnBackRequested时有一个事件
  • 我目前不能,因为Appx.cs中的一个总是被调用的
  • 我想知道是否有一种方法来激发PageTwo.xaml.cs页面中的OnBackRequested,而不是Appx.cs页面中的OnBackRequested。

任何帮助,将不胜感激。 我失去了我的想法试图得到这个工作:P

事件处理程序按照已添加的顺序触发,所以在这方面没有运气。 另一种选择是制作自己的活动,包装原来的活动。 在App.xaml.cs

 public event EventHandler<BackRequestedEventArgs> BackRequested; private void OnBackRequested(object sender, BackRequestedEventArgs e) { // Raise child event var eventHandler = this.BackRequested; if (eventHandler != null) { eventHandler(sender, e); } if (!e.Handled) { if (_rootFrame != null && _rootFrame.CanGoBack) { e.Handled = true; _rootFrame.GoBack(); } } } 

然后在你的页面中,订阅子项目而不是主项目:

 ((App)(App.Current)).BackRequested += OnBackRequested; 

请务必在离开页面时取消订阅该事件,否则可能会导致内存泄漏。