【问题标题】:Over ride back button functionality in winrt windows phone applicationwinrt windows phone 应用程序中的后退按钮功能
【发布时间】:2015-05-07 21:30:09
【问题描述】:

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

我想要的是每当用户按下返回按钮按钮时。

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

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

更新:

这一行在页面构造函数中。

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-runtime windows-phone-8.1 winrt-xaml


    【解决方案1】:

    您可以按照here 的建议使用Windows.Phone.UI.Input.HardwareButtons.BackPressed 事件。

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

    问题似乎是重复的。

    更新:

    由于您使用的是 NavigationHelper 类,因此该类处理 BackPressed 事件并自行执行导航:

     /// <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.Handled 设置为 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;
        }
    }
    

    【讨论】:

      【解决方案2】:

      终于找到this 帖子来控制后退按钮导航及其完美运行,Mehrzad Chehraz 的回答与此类似但未完成。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多