【问题标题】:Can´t Pop a Popup-Page无法弹出弹出页面
【发布时间】: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); ... }
  • 由于某种原因,我基本上无法弹出最后一个弹出页面。

标签: c# xamarin popup nuget


【解决方案1】:

我刚刚发现我的这部分代码一直在阻止页面弹出。

 protected override void OnAppearing()
        {
            base.OnAppearing();
            Navigation.PopModalAsync();
        }

也许有人可以编辑这个答案并添加解释。

感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    相关资源
    最近更新 更多