【问题标题】:Is it possible to use modal page in Tabbed pages in Xamarin Forms?是否可以在 Xamarin Forms 的选项卡式页面中使用模式页面?
【发布时间】:2020-06-23 12:50:08
【问题描述】:

正如我的标题所说,当您单击 Xamarin Forms 中的选项卡时是否可以使用模式页面?

当我点击我的 5 个标签中的一个时,我想这样做会打开一个模态页面。如果可能的话,有人可以给我一些例子来说明它是如何完成的,或者给我指出正确的方法。

【问题讨论】:

  • 我认为你可以完成这项工作,但这听起来像是一个非常糟糕的用户体验。我真的会重新考虑任何需要这种行为的设计。

标签: xamarin xamarin.forms


【解决方案1】:

当然,这是可能的,但有点棘手。

  1. 创建一个空白页面(例如FakePage)并将其添加到TabbedPage.Children
  2. 在覆盖 OnCurrentPageChanged 后面的 TabbedPage 代码中,检查何时选择了您的 fakepage,然后打开一个 Modal。
  3. 当模式打开时,告诉您的TabbedPage 返回上一个选项卡(因此当用户关闭模式时它不会看到空白页)

您的标签页儿童

<views:Page1 Title="First tab" />
<views:Page2 Title="Second Tab" />
<views:FakePage Title="Modal tab" />

后面的标签页代码

    private Page _lastPage;
    protected override async void OnCurrentPageChanged()
    {
        if (CurrentPage is FakePage)
        {
            await Navigation.PushModalAsync(new YourModalPage());

            //Wait a bit for the modal to open, then reselect the last tab
            //This is useful when a user close the modal: you dont want to show a blank page
            await Task.Delay(150);
            CurrentPage = _lastPage;
        } 
        else
        {
            _lastPage = CurrentPage;
        }

        base.OnCurrentPageChanged();
    }

【讨论】:

    【解决方案2】:

    按照詹保罗所说的,下面的方法可能会更流畅一些:

    protected override async void OnCurrentPageChanged()
        {
            if (CurrentPage is FakePage)
            {
    
                CurrentPage = _lastPage;
                await Navigation.PushModalAsync(new YourModalPage());
    
            }
            else
            {
                _lastPage = CurrentPage;
            }
    
            base.OnCurrentPageChanged();
        }
    

    这样,您将不会在过渡期间看到空白的假页面。

    【讨论】:

      猜你喜欢
      • 2017-10-11
      • 1970-01-01
      • 2021-03-15
      • 1970-01-01
      • 2018-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多