我想在硬件上按下后退按钮时向用户显示一个MessageBox,但它根本不起作用。我试过这些变化,但我从未见过MessageBox:
// VARIATION 1
IAsyncResult mbResult = Microsoft.Xna.Framework.GamerServices.Guide.BeginShowMessageBox("Warning", "Are you sure you want to leave this page?",
new string[] { "Yes", "No" }, 0, Microsoft.Xna.Framework.GamerServices.MessageBoxIcon.None, null, null);
mbResult.AsyncWaitHandle.WaitOne();
int? yesNo = Microsoft.Xna.Framework.GamerServices.Guide.EndShowMessageBox(mbResult);
if (yesNo.HasValue)
{
if (yesNo.Value == 0)
{
// Yes pressed
}
else
{
// No pressed
}
}
// VARIATION 2
MessageBoxResult mbr = MessageBox.Show("Are you sure you want to leave this page?", "Warning", MessageBoxButton.OKCancel);
if(mbr == MessageBoxResult.OK)
{
// OK pressed
}
else
{
// Cancel pressed
}
如果我将e.Cancel = true
写入OnBackKeyPress
事件,那么我就无法离开页面,因此代码正在执行,但我从未看到MessageBox:
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
e.Cancel = true;
}
可能是什么问题,或者我做错了什么?
答案 0 :(得分:2)
我可以看到您定位的是Windows Phone 8.1 Silverlight,但this question的答案仍然是实际的,at MSDN"
适用于:Windows Phone 8和 Windows Phone Silverlight 8.1 | Windows Phone OS 7.1
在Windows Phone 8中,如果您在OnBackKeyPress(CancelEventArgs)中调用Show或BackKeyPress事件的处理程序,则应用程序将退出。
该解决方案也在MSDN上提供。不久 - 在Dispatcher上运行你的Messeagebox.Show:
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
e.Cancel = true;
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
MessageBoxResult mbr = MessageBox.Show("Are you sure you want to leave this page?", "Warning", MessageBoxButton.OKCancel);
if(mbr == MessageBoxResult.OK)
{ OK pressed }
else
{ Cancel pressed }
});
}
答案 1 :(得分:1)
您可能已经解决了问题,但从外观来看,您的硬件返回按钮从未触发,并且触发了它的默认设置。
你需要在初始化组件下添加它以使你的方法触发。
HardwareButtons.BackPressed += HardwareButtons_BackPressed;
答案 2 :(得分:0)
试试这段代码会有所帮助
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
MessageBoxResult Exit = MessageBox.Show("Do You Want To Exit?", "Attention !!!", MessageBoxButton.OKCancel);
if (Exit == MessageBoxResult.OK)
{
Application.Current.Terminate(); //Terminates App
}
else if (Exit == MessageBoxResult.Cancel)
{
e.Cancel = true;
}
}