C# OnBackKeyPress未按预期工作

C# OnBackKeyPress未按预期工作,c#,windows-phone-8,C#,Windows Phone 8,在我的应用程序中,我有这两个功能。自从我添加了OnBackKeyPress功能后,即使我按下back按钮,OnNavigatedFrom中的if语句也是真的(可能是因为e.cancel=true;内OnBackKeyPress) 由于您正在OnBackKeyPress中设置e.cancel=true,因此导航模式将不会在OnNavigatedFrom中Back 尝试在页面中使用默认为false的全局变量,并在OnBackKeyPress中将其设置为true。然后,在OnNavigatedFrom

在我的应用程序中,我有这两个功能。自从我添加了
OnBackKeyPress
功能后,即使我按下back按钮,
OnNavigatedFrom
中的
if
语句也是真的(可能是因为
e.cancel=true;
OnBackKeyPress


由于您正在
OnBackKeyPress
中设置
e.cancel=true
,因此
导航模式将不会在
OnNavigatedFrom
Back


尝试在页面中使用默认为
false
的全局变量,并在
OnBackKeyPress
中将其设置为
true
。然后,在
OnNavigatedFrom
中检查此变量,而不是
NavigationMode.Back

@lhan16,我尝试在if语句中设置断点,并按下了Back键。声明正在运行。我觉得取消很可能是原因。而且移除它不会导致问题。由于它将返回backstack并同时选择seler.xaml,我知道,您将希望保留
e.cancel
。那么
e.NavigationMode
OnNavigatedFrom
中的值是什么呢?@lhan16和它的“新”即使在我按下windows按钮时也是如此。也许你可以创建一个名为
wentBack
的全局变量,默认情况下它设置为
false
,然后在
OnBackKeyPress
中你可以将它设置为
true
。在
OnNavigatedFrom
中,您可以检查
wentBack==true
,您知道用户点击了“Back”。@lhan16成功了。我在OnNavigatedTo函数中将“Back”设置为false
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
   // On back navigation there is no need to save state.
   if (e.NavigationMode != System.Windows.Navigation.NavigationMode.Back)
   {
      StoreState(); //this should not run when i press back button
   }

   FilterPreviewPivot.SelectionChanged -= FilterPreviewPivot_SelectionChanged;
   base.OnNavigatedFrom(e);
}

protected override void OnBackKeyPress(CancelEventArgs e)
{
   while (NavigationService.CanGoBack) NavigationService.RemoveBackEntry();
   NavigationService.Navigate(new Uri("/Chooser.xaml", UriKind.Relative));

   // cancel the navigation
   e.Cancel = true;
}