也许有人能回答这个问题,我对编程有点陌生,不明白发生了什么。我试着弹出一个弹出式页面,但它不能正常工作。
以下情况:我有三个Content page和一个弹出页面
:
尝试1:
private void BtnOkay_Clicked(object sender, EventArgs e)
{
if (currentDungeon == "DungeonX")
{
Navigation.PopModalAsync();
Navigation.PopModalAsync();
Navigation.PushModalAsync(new DungeonPage(currentPlayer));
}
}
第一个结果:它完全忽略了Naviagtion.PopModalAsync();
并将新的DungeonPage推到它的顶部。
尝试2:
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和await awswell,它仍然有效。如果我尝试使用上面提到的正确方法,它会抛出相同的异常。
如果你读到这里,提前感谢你的时间
我刚刚发现这部分代码一直阻止页面弹出。
protected override void OnAppearing()
{
base.OnAppearing();
Navigation.PopModalAsync();
}
也许有人可以编辑这个答案并添加一个解释。
感谢大家的帮助。