当用户退出应用程序至少一次时,我有一个需要引起用户注意的应用程序。所以我得到下面的代码来显示一个消息框。我不知道的是,如果用户已阅读该消息,我该如何真正退出应用程序?因为似乎后面的键事件总是会出现在我设置的调用中(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();
}
}
答案 0 :(得分: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);
}
这将显示一个消息框,但改为“确定”和“取消”按钮,如果用户按下“确定”,将直接退出。
对于“不要再问”,可以在设置页面上添加设置。如果用户想要再次看到对话框,则在用户第一次选择“确定”和“取消”时添加第二个对话框。
答案 1 :(得分:1)
不幸的是,没有很好的方法来实现你所追求的结果。 Windows Phone不允许您以编程方式退出应用程序。大多数人在这种情况下使用的解决方案是抛出一个无法解释的异常。请参阅以下内容:
How to Exit windows phone 7 app? Is there a way to programmatically quit my App? (Windows Phone 7)
答案 2 :(得分: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;
在正确的地方
希望这有帮助
答案 3 :(得分:0)
对于WP8,您可以调用Application.Current.Terminate()
以编程方式退出应用。对于WP7,这是不可用的,你必须选择科林给出的一个选项。
但是,如果你采用这种方式,你应该小心地满足Microsoft Store的认证要求,因为如果你的应用程序没有按预期运行,它可能会被拒绝。
答案 4 :(得分: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();
}
}