覆盖 winrt Windows Phone 应用程序中的后退按钮功能



在我的应用程序中,有一个带有一个复选框的页面。

我想要的是每当用户按下后退按钮按钮时。

如果选中复选框,则取消选中它

如果未选中复选框,则执行其功能,例如返回。

更新:

此行位于页面构造函数中。

Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed;

这是事件。

void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
    if (RechargeAccountPivot.SelectedIndex == 2 && ePayBorder.Visibility == Windows.UI.Xaml.Visibility.Visible)
    {
        ePayBorder.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
        e.Handled = true;
    }
}

此代码在 BAC Press 上运行,但在此代码执行后,应用程序页面也返回。

我认为值得告诉您的是,我使用的是基本页面,默认情况下具有这些代码行。

private NavigationHelper navigationHelper;
public RechargeAccount()
    {
        this.InitializeComponent();
        this.navigationHelper = new NavigationHelper(this);
        this.navigationHelper.LoadState += this.NavigationHelper_LoadState;
        this.navigationHelper.SaveState += this.NavigationHelper_SaveState;
        Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed;
    }

我认为这个变量正在处理导航,但无法识别。

您可以使用 Windows.Phone.UI.Input.HardwareButtons.BackPressed 事件,如此处的建议。

private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e) {
   if (checkbox.IsChecked) {
       checkbox.IsChecked = false;
       e.Handled = true;
   }
}

不过问题似乎是重复的。

更新:

由于您使用的是 NavigationHelper 类,因此此类处理 BackPress 事件并通过它自己的执行导航:

 /// <summary>
 /// Invoked when the hardware back button is pressed. For Windows Phone only.
 /// </summary>
 /// <param name="sender">Instance that triggered the event.</param>
 /// <param name="e">Event data describing the conditions that led to the event.</param>
 private void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e) {
    if (this.GoBackCommand.CanExecute(null)) {
       e.Handled = true;
       this.GoBackCommand.Execute(null);
    }
 }

因此,在这种情况下,将 e.Handle 设置为 true 不起作用。为了控制导航,您可以编辑 NavigationHelper 类(它存在于项目的"Common"目录中)。

首先,将类的该部分替换为:

public event EventHandler<Windows.Phone.UI.Input.BackPressedEventArgs> BackPressed;
private void OnBackPressed(Windows.Phone.UI.Input.BackPressedEventArgs e) {
   if (this.BackPressed != null) {
      this.BackPressed(this, e);
   }
}
/// <summary>
/// Invoked when the hardware back button is pressed. For Windows Phone only.
/// </summary>
/// <param name="sender">Instance that triggered the event.</param>
/// <param name="e">Event data describing the conditions that led to the event.</param>
private void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e) {
   this.OnBackPressed(e);
   if (!e.Handled) {
      if (this.GoBackCommand.CanExecute(null)) {
         e.Handled = true;
         this.GoBackCommand.Execute(null);
      }
   }
}

然后在页面中使用 NavigationHelper 类的新定义的 BackPressed 事件:

private NavigationHelper navigationHelper;
public RechargeAccount()
{
    this.InitializeComponent();
    this.navigationHelper = new NavigationHelper(this);
    this.navigationHelper.LoadState += this.NavigationHelper_LoadState;
    this.navigationHelper.SaveState += this.NavigationHelper_SaveState;
    this.navigationHelper.BackPressed += this.NavigationHelper_BackPressed;
}
void NavigationHelper_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
    if (RechargeAccountPivot.SelectedIndex == 2 && ePayBorder.Visibility == Windows.UI.Xaml.Visibility.Visible)
    {
        ePayBorder.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
        e.Handled = true;
    }
}

终于找到这篇文章来控制后退按钮导航并且它完美地工作,Mehrzad Chehraz 的答案与此类似,但尚未完成。

最新更新