【发布时间】:2021-02-25 10:29:51
【问题描述】:
也许有人对此有一个答案,我对编程有点陌生,但不明白发生了什么。我尝试弹出一个弹出页面,但它不能正常工作。
以下情况:我的堆栈上有三个内容页面和一个弹出页面。
代码片段:
第一次尝试:
private void BtnOkay_Clicked(object sender, EventArgs e)
{
if (currentDungeon == "DungeonX")
{
Navigation.PopModalAsync();
Navigation.PopModalAsync();
Navigation.PushModalAsync(new DungeonPage(currentPlayer));
}
}
第一个结果:它完全忽略了Naviagtion.PopModalAsync();,并将新的 DungeonPage 推送到它上面。
第二次尝试:
private async void BtnOkay_Clicked(object sender, EventArgs e)
{
if (currentDungeon == "DungeonX")
{
await Navigation.PopModalAsync();
await Navigation.PopModalAsync();
await Navigation.PushModalAsync(new DungeonPage(currentPlayer));
}
}
第二个结果:和第一个结果一样,它完全忽略了Naviagtion.PopModalAsync();并将新的DungeonPage推到它上面。
第三次尝试:
private async void BtnOkay_Clicked(object sender, EventArgs e)
{
if (currentDungeon == "DungeonX")
{
await PopupNavigation.Instance.PopAsync();
await Navigation.PopModalAsync();
await Navigation.PushModalAsync(new DungeonPage(currentPlayer));
}
}
第三个结果:我尝试以正确的方式弹出弹出页面,但现在我得到以下异常。 System.IndexOutOfRangeException: 'No Page in PopupStack'
附加信息:
我这样创建了弹出页面:
private async Task PlayerAliveCheck()
{
...
await Navigation.PushModalAsync(new CombatPostScreen(player, result);
...
}
我有一个类似的情况,第一次尝试工作完全正常,函数 checkLevel() 从私有 void 事件中调用。
private void checkLevel()
{
Navigation.PushModalAsync(new SmelteryPageDetail(slotItem, player, characters));
}
private void BtnUpgrade_Clicked(object sender, EventArgs e)
{
...
Navigation.PopModalAsync();
Navigation.PopModalAsync();
Navigation.PushModalAsync(new SmelteryPage(currentPlayer));
}
我尝试使用 async 并等待 awswell,它仍然有效。如果我尝试使用上面提到的正确方法,它会抛出相同的异常。
如果您读到这里,在此先感谢您抽出宝贵时间
【问题讨论】:
-
可以调用await Navigation.PopModalAsync();在你的 OnDisappearing 方法中
-
你是如何推送模态的?你问的是弹出,但我需要看看你是如何先推送的以及从哪里推送的。
-
@Anand 感谢您的回答,但这并没有关闭弹出窗口。
-
@enisn 这就是我创建弹出窗口的方式 private async Task PlayerAliveCheck() { ... await Navigation.PushModalAsync(new CombatPostScreen(player, result); ... }
-
由于某种原因,我基本上无法弹出最后一个弹出页面。