如果用户点击"返回"我正在显示一个消息框在游戏应用程序的主页面上。
通常的解决方案
MessageBoxResult res = MessageBox.Show(txt, cap, MessageBoxButton.OKCancel);
if (res == MessageBoxResult.OK)
{
e.Cancel = false;
return;
}
对我不起作用,因为我需要将这些按钮本地化,而不是使用手机的本地化,而是使用应用程序的选定语言(即,如果用户的手机具有英语区域设置)他已经将应用程序的语言设置为法语,按钮应该是" Oui""非"而不是默认" OK"和&# 34;取消"。)
我尝试了以下方法,它在视觉上有效:
protected override void OnBackKeyPress(CancelEventArgs e)
{
//some conditions
e.Cancel = true;
string quitText = DeviceWrapper.Localize("QUIT_TEXT");
string quitCaption = DeviceWrapper.Localize("QUIT_CAPTION");
string quitOk = DeviceWrapper.Localize("DISMISS");
string quitCancel = DeviceWrapper.Localize("MESSAGEBOX_CANCEL");
Microsoft.Xna.Framework.GamerServices.Guide.BeginShowMessageBox(
quitCaption,
quitText,
new List<string> { quitOk, quitCancel },
0,
Microsoft.Xna.Framework.GamerServices.MessageBoxIcon.Error,
asyncResult =>
{
int? returned = Microsoft.Xna.Framework.GamerServices.Guide.EndShowMessageBox(asyncResult);
if (returned.Value == 0) //first option = OK = quit the game
{
e.Cancel = false;
return;
}
},
null);
//some more features
}
但它并没有退出申请。
我应该使用哪种方法?我不会使用&#34;终止&#34;因为它是一个相当大的应用程序,以这种方式退出它并不好。
答案 0 :(得分:2)
它不会退出,因为BeginShowMessageBox()
是异步的。这意味着调用将立即返回,因为您将e.Cancel
设置为true
,然后应用程序将永远不会关闭(当您的事件处理程序将被执行时调用方法结束而不退出)。
等待用户关闭对话框以将e.Cancel
设置为正确的值(省略AsyncCallback
参数)。首先删除回调:
IAsyncResult asyncResult = Guide.BeginShowMessageBox(
quitCaption, quitText, new List<string> { quitOk, quitCancel },
0, MessageBoxIcon.Error, null, null);
然后等待对话框关闭:
asyncResult.AsyncWaitHandle.WaitOne();
最后,您可以检查其返回值(就像您在原始回调中所做的那样):
int? result = Guide.EndShowMessageBox(asyncResult);
if (result.HasValue && result.Value == 0)
e.Cancel = false;