gpt4 book ai didi

c# - [UWP][C#] 覆盖 Appx.cs 中设置的 backpress 导航

转载 作者:可可西里 更新时间:2023-11-01 14:43:40 26 4
gpt4 key购买 nike

有点卡在这里。我有一个 splitview 应用程序,当按下位于 Appx.cs 中的后退键时,它具有向后导航的事件。

我想在 splitviews 内容页面内导航的页面之一中定义不同的操作(例如,当某个元素可见时关闭该元素)但是应用程序始终遵循 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 内容 Pane 中的其中一个页面中的代码:

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 方法正在处理我的应用程序中的后退导航。
  • 我在 splitview 内容 Pane 中打开了一个页面(我们称之为 PageTwo.xaml)。
  • 在 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;

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

关于c# - [UWP][C#] 覆盖 Appx.cs 中设置的 backpress 导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32635667/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com