【发布时间】:2016-12-27 08:44:52
【问题描述】:
我在我的应用程序中覆盖 BackButton 并显示 MessageDialog。
public Scenario_3()
{
this.InitializeComponent();
Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed;
}
private async void HardwareButtons_BackPresseed(object sender, BackPressedEventArgs e)
{
e.Handled = true;
var dialog = new MessageDialog("Do you want exit?");
dialog.Commands.Add(new Windows.UI.Popups.UICommand("yes") { Id = 0 });
dialog.Commands.Add(new Windows.UI.Popups.UICommand("no") { Id = 1 });
dialog.DefaultCommandIndex = 0;
dialog.CancelCommandIndex = 1;
var result = await dialog.ShowAsync();
if (result.Label == "yes")
{
this.Frame.Navigate(typeof(BlankPage1));
((Frame)Window.Current.Content).BackStack.Clear();
}
导航到 BlankPage1 后,如果按下 BackButton,我会再次看到 MessageDialog。 导航后如何取消此覆盖?
【问题讨论】:
-
如果没有好的minimal reproducible example 和更清晰的问题陈述,您的问题很难理解。但是,当您离开当前页面时,您似乎忘记了取消订阅
BackPressed事件。 -
您是否尝试过例如使用 flag 来检查您的按钮/方法是否曾被调用过?
-
彼得·杜尼霍,谢谢!您的建议解决了这个问题。
-
如果@Romasz 可以将他的评论作为答案发布,您可以将其标记为答案,这样更多寻找解决方案的人可以快速找到一个好的答案。
-
@TomášHübelbauer 如果没有从 OP 获得更多信息,很难在这里写出一个好的答案 - 如果他使用宽应用程序返回事件或仅针对特定页面 + 更多详细信息。彼得的建议似乎也解决了 OP 的问题。
标签: c# windows windows-phone-8.1 uwp