在我的应用程序中,有一个带有一个复选框的页面。
我想要的是每当用户按下后退按钮按钮时。
如果选中复选框,则取消选中它
如果未选中复选框,则执行其功能,例如返回。
更新:
此行位于页面构造函数中。
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 的答案与此类似,但尚未完成。