我在Windows Phone 7/8应用程序中的Application Closing / Deactivated方法中显示了一个MessageBox。它用于警告用户因应用程序正在关闭而禁用活动计时器。 App Closing / Deactivated事件是完美的,因为在所有应用程序页面中放置逻辑将是一个杀手 - 太多的页面和导航路径。这很好用 - 消息框在WP7中显示OK。
我也知道breaking changes in the API of WP8。在那里明确指出MessageBox.Show在Activated和Launching中将导致异常。
问题是在WP8中,应用程序关闭时不会显示消息框。代码执行无例外,但不显示任何消息。
P.S。我在MS WP Dev论坛上问了这个,但显然没有人知道。
答案 0 :(得分:1)
将msgBox代码从应用关闭事件移动到主页代码隐藏中。覆盖onback键按下事件并将代码放在那里。这是在7.x上完成的:
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
if (MessageBox.Show("Do you want to exit XXXXX?", "Application Closing", MessageBoxButton.OKCancel) == MessageBoxResult.Cancel)
{
// Cancel default navigation
e.Cancel = true;
}
}
仅供参考 - 在WP8上,您似乎必须将MsgBox Show分配给新线程。
这会在应用程序实际开始在事件模型中关闭之前提示用户。如果用户接受后退键,则允许按下,否则取消。您不能覆盖主页按钮,它必须始终立即进入主屏幕。您应该查看后台代理以通过暂停/恢复来保留您的计时器代码。
答案 1 :(得分:0)
在RootFrame上注册BackKeyPress事件。
RootFrame.BackKeyPress += BackKeyPressed;
private void BackKeyPressed(object sender, CancelEventArgs e)
{
var result = (MessageBox.Show("Do you want to exit XXXXX?", "Application Closing", MessageBoxButton.OKCancel));
if (result == MessageBoxResult.Cancel)
{
// Cancel default navigation
e.Cancel = true;
}
}