在Windows手机中消息框的奇迹行动

时间:2014-04-04 07:31:46

标签: c# windows-phone-8 messagebox

在我的windows phone 8应用程序中,我需要一个messageBox,然后才能使用BackKey关闭应用程序按这样..

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
    string caption = "Stop music and exit?";
    string message = "If you want to continue listen music while doing other stuff, please use Home key instead of Back key. Do you still want to exit?";
    e.Cancel = MessageBoxResult.Cancel == MessageBox.Show(message, caption, MessageBoxButton.OKCancel);

    base.OnBackKeyPress(e);
}

来自HERE

对于我的情况,它工作正常..

  • 如果单击“确定”,将使用Terminate()
  • 关闭应用程序
  • 如果取消,应用程序处于激活模式
  • "的问题如果单独留下MessageBox而不选择任何选项,则会在10秒后关闭#34;

    我在这里失踪了..让我知道如果我遗漏了什么

3 个答案:

答案 0 :(得分:1)

消息框,某些时候某些东西未被选中,会自动触发取消选项。

你能做的最好的事情是声明e.Cancel = true;然后弹出消息框

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{   e.Cancel=true; 
    string caption = "Stop music and exit?";
    string message = "If you want to continue listen music while doing other stuff, please use Home key instead of Back key. Do you still want to exit?";
    if(MessageBox.Show(message, caption, MessageBoxButton.OKCancel)==MessageboxResult.Ok)
    {
       //exit;
    }
    else
    {
      //do what ever you like
    }
    base.OnBackKeyPress(e);
}

此外,您最终应该创建一个自定义消息框,而不是调用Messagebox.Show();在打开信息时按下锁定屏幕按钮也会使其不可见。

答案 1 :(得分:1)

我已经检查了你的代码,它运行得很好 - 在模拟器和设备上没有任何问题 - MessageBox仍然存在并且不会消失。

也许你在导航事件或某个地方where time is limited to 10 seconds中有其他MessageBox:

  

本节中描述的事件使您有机会在应用程序进入和离开前台时保存和恢复状态。但是,建议的做法是在数据更改时保存状态数据。例如,Web请求的结果可以在从网络到达时保存到磁盘或应用程序状态字典(或两者)。您不应该等到Deactivated事件发生以存储此数据。请记住,所有应用程序生命周期事件都会强制应用程序完成任何任务的时间限制为10秒。

答案 2 :(得分:0)

我的Windows Phone 8.1 XAML / C#应用程序遇到了同样的问题。 在我的情况下,它是 HardwareButtonsOnBackPressed 事件,并且在显示MessageBox之前将 BackPressedEventArgs.Handled 属性设置为true。

private void HardwareButtonsOnBackPressed(object sender, BackPressedEventArgs e)
    {
        e.Handled = true;

            var dlg = new MessageDialog("Are you shure you want to quit?", "Exit application?");
            dlg.Commands.Add(new UICommand("Yes", c =>
            {
                Application.Current.Exit();
            }));
            dlg.Commands.Add(new UICommand("No"));
            dlg.ShowAsync();
        }
    }