0

我有一个应用程序需要在用户退出应用程序至少一次时引起用户的注意。所以我得到下面的代码来显示一个消息框。我不知道的是,如果用户已经阅读了消息,我该如何真正退出应用程序?因为似乎后退键事件总是会出现在我设置的呼叫(OnBackKeyPress)或者什么是处理显示消息框而不弄乱覆盖BackKey的好方法?因为如果屏幕上有另一个弹出窗口并且用户按下了后退键,那么如果我尝试自己处理后退键,我似乎遇到了一些异常。

我的理想情况是,一旦她/他按下消息框的退出按钮,应用程序就会立即关闭。如果按下取消,它将返回而不退出。请帮忙。谢谢!

我用过的东西……但效果不好

private void OnBackKeyPressed(object sender, CancelEventArgs e)
    {
        e.Cancel = true;

        CheckBox checkBox = new CheckBox()
        {
            Content = "Do not ask me again",
            Margin = new Thickness(0, 14, 0, -2)
        };

        TiltEffect.SetIsTiltEnabled(checkBox, true);

        CustomMessageBox messageBox = new CustomMessageBox()
        {
            Caption = "Would you like to stop and exit?",
            Message =
                "If you want to continue listen music while doing other stuff, please use Home key instead of Back key",
            Content = checkBox,
            LeftButtonContent = "Exit",
            RightButtonContent = "Cancel",
        };

        messageBox.Dismissed += (s1, e1) =>
        {
            switch (e1.Result)
            {
                case CustomMessageBoxResult.LeftButton: //Exit
                    return;// What to do here??
                case CustomMessageBoxResult.RightButton: //Cancel
                case CustomMessageBoxResult.None:
                    break;
                default:
                    break;
            }
        };
        messageBox.Show();
    }

}
4

5 回答 5

3

如果您真的需要按钮说“退出”,则必须使用 ColinE 或 Paul Annetts 解决方案。就我个人而言,我会尝试以另一种方式来制定消息,并使用像这样的普通消息框:

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);
}

这将显示一个消息框,但带有“确定”和“取消”按钮,如果用户按下“确定”,将直接退出。

而对于“不再询问”,也许可以在设置页面上添加设置。并在用户第一次在“确定”和“取消”之间选择时添加第二个对话框,如果他或她想再次看到该对话框。

于 2012-12-16T13:04:24.900 回答
1

不幸的是,没有很好的方法来实现您所追求的结果。Windows Phone 不允许您以编程方式退出应用程序。大多数人在这种情况下使用的解决方案是抛出一个未经处理的异常。请参阅以下内容:

如何退出windows phone 7应用程序? 有没有办法以编程方式退出我的应用程序?(Windows 电话 7)

于 2012-12-16T06:46:01.610 回答
1

我使用自定义消息框做了同样的事情。像这样修改您的代码:

messageBox.Dismissed += (s1, e1) =>
    {
       switch (e1.Result)
        {
            case CustomMessageBoxResult.LeftButton: //Exit
                App.Current.Terminate(); //Put this line followed by break
                break;
            case CustomMessageBoxResult.RightButton: //Cancel
                break;
            default:
                break;
        }
    };

当用户按下退出时,您的应用程序将终止,当按下关闭时,“左”按钮的默认操作是关闭消息框。这应该工作,只要你把线

break;

在正确的地方

希望这可以帮助

于 2013-02-08T10:12:25.060 回答
0

对于 WP8,您可以调用Application.Current.Terminate()以编程方式退出应用程序。对于 WP7,这是不可用的,您必须选择 Colin 提供的选项之一。

但是,如果你走这条路,你应该小心满足 Microsoft Store 的认证要求,因为如果你的应用程序没有按预期运行,它可能会被拒绝。

于 2012-12-16T08:01:32.510 回答
0

您可以简单地取消先按下后退键的事件,然后根据在消息框上单击的按钮,您可以采取如下适当的操作:

private void BackKey_Pressed(object sender, System.ComponentModel.CancelEventArgs e)
{
        e.Cancel = true;
        MessageBoxResult messageBoxResult = MessageBox.Show("Text", "Caption", MessageBoxButton.OKCancel);
        if (messageBoxResult == MessageBoxResult.OK)
        {
            Application.Current.Terminate();
        }
}
于 2014-02-25T11:23:28.403 回答