C# BackButton事件关闭应用程序Windows 10应用程序
我目前正在为Windows 10开发一个应用程序。我想在我的应用程序上实现后退按钮事件。当我按下Frame1上的back按钮时,应用程序关闭,这是我想要做的。当我在第2帧,导航到第3帧,并按下后退按钮时,应用程序自动关闭 我想要的是Frame3上的back按钮事件使Frame3返回Frame2,当我按下Frame2上的back按钮时,终止应用程序 在我的App.xaml.cs上 在my Frame1.xaml.cs上: 在my Frame2.xaml.cs上: 在my Frame3.xaml.cs上:C# BackButton事件关闭应用程序Windows 10应用程序,c#,xaml,windows-10,C#,Xaml,Windows 10,我目前正在为Windows 10开发一个应用程序。我想在我的应用程序上实现后退按钮事件。当我按下Frame1上的back按钮时,应用程序关闭,这是我想要做的。当我在第2帧,导航到第3帧,并按下后退按钮时,应用程序自动关闭 我想要的是Frame3上的back按钮事件使Frame3返回Frame2,当我按下Frame2上的back按钮时,终止应用程序 在我的App.xaml.cs上 在my Frame1.xaml.cs上: 在my Frame2.xaml.cs上: 在my Frame3.xaml.c
这是因为您添加到BackPressed事件的事件处理程序将按FIFO顺序启动,因此您的事件处理程序堆栈根据您的代码如下所示: 当您处于第1页时: 1.关闭应用程序 导航到第2页时: 1.关闭应用程序 2.关闭应用程序 从第2页导航到第3页时: 1.关闭应用程序 2.关闭应用程序 3.返回到最后一页 因此,当您在第3页按下后退按钮时,第一个处理程序应该首先启动,这意味着它将
关闭应用程序
,而不是返回到最后一页
那么如何解决这个问题呢
在您的每个页面中:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
HardwareButtons.BackPressed -= HardwareButtons_BackPressed;
}
这意味着,无论何时离开此页面,您都将取消注册Backpressed事件,并且当您输入一个页面时,您将注册一个新页面以使其正常工作。您知道@JuniperPhoton是什么吗?谢谢^^成功了
private void 1_BackRequested(object sender, Windows.UI.Core.BackRequestedEventArgs e)
{
Frame frame1 = Window.Current.Content as Frame;
if (frame1 != null)
{
e.Handled = true;
Application.Current.Exit();
}
}
private void 2_BackRequested(object sender, Windows.UI.Core.BackRequestedEventArgs e)
{
Frame frame2= Window.Current.Content as Frame;
if (frame2 != null)
{
e.Handled = true;
Application.Current.Exit();
}
}
private void 3_BackRequested(object sender, Windows.UI.Core.BackRequestedEventArgs e)
{
Frame frame3= Window.Current.Content as Frame;
if (frame3.CanGoBack)
{
e.Handled = true;
frame3.GoBack();
}
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
HardwareButtons.BackPressed -= HardwareButtons_BackPressed;
}