iOS上不支持全局支持PushAsync,请使用NavigationPage

aks*_*lod 6 c# xaml xamarin.forms

当我处理项目的Tap事件时,一切正常ListView,但是当我在其中使用TabbedPage它时显示异常请提前解决此问题.

例外:iOS上不支持全局支持PushAsync,请使用NavigationPage.

这是Xaml代码:

    <?xml version="1.0" encoding="utf-8"?>
    <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:NavTest" x:Class="NavTest.NavTestPage" Title="Home">
        <ContentPage.Content>
            <StackLayout Orientation="Vertical" VerticalOptions="Center">
                <Label Text="Welcome to Xamarin Forms!" VerticalOptions="Center" HorizontalOptions="Center" />
                <!--<Button Text="Go to " BackgroundColor="Lime" VerticalOptions="Center" Clicked="Handle_Clicked" >
            </Button>-->
                <ListView x:Name="myListView" ItemSelected="Handle_ItemSelected">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <ViewCell>
                                <Label Text="{Binding}" VerticalOptions="Center" HorizontalOptions="Center" />
                            </ViewCell>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
            </StackLayout>
        </ContentPage.Content>
    </ContentPage>
Run Code Online (Sandbox Code Playgroud)

这是OnClick处理程序:

    async void Handle_Clicked(object sender, System.EventArgs e)
    {
        await  Navigation.PushAsync(new Page1());
    }                    
Run Code Online (Sandbox Code Playgroud)

Ven*_*aju 12

仅在iOS中运行时会出现此错误.

在App.cs Rootpage(起始页)中给出如下

 public App()
  {
      MainPage=new NavigationPage(new LoginPage());
  }
Run Code Online (Sandbox Code Playgroud)

现在,我们可以在全球范围内使用PushAsyn()

  • 如果您甚至在 Android 中不使用导航页面,也会发生同样的错误 (3认同)

Ste*_*sen 4

您的以下位置可能有一些与此类似的代码App.xaml.cs

public App()
{
    InitializeComponent();

    var tabs = new TabbedPage();    
    tabs.Children.Add(new NavTestPage() { Title = "Tab title" });
    MainPage = tabs;
}
Run Code Online (Sandbox Code Playgroud)

您应该更改为:

public App()
{
    InitializeComponent();

    var tabs = new TabbedPage();
    var page = new NavTestPage() { Title = "Page title" };    
    tabs.Children.Add(new NavigationPage(page) { Title = "Tab title" });

    MainPage = tabs;
}
Run Code Online (Sandbox Code Playgroud)

通过包裹在 a 中,NavigationPage您可以选择将页面推送到导航堆栈上。ATabbedPage本身只是选项卡,每个选项卡只有 1 页。这应该给你一个像这样的结构:

TabbedPage
    NavigationPage
        ContentPage
    NavigationPage
        ContentPage
    NavigationPage
        ContentPage
Run Code Online (Sandbox Code Playgroud)

更新: 我想您所做的只是在 XAML 中更改ContentPage为。TabbedPage事情不是这样的TabbedPageTabbedPage您可能应该首先阅读一下实际工作原理。

https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/navigation/tabbed-page/

在您的情况下,您可能应该创建一个具有如下 XAML 的新页面:

<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
            xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
            xmlns:local="clr-namespace:NavTest"
            x:Class="NavTest.MyTabbedPage">
    <NavigationPage Title="NavTest">
        <x:Arguments>
            <local:NavTestPage />
        </x:Arguments>
    </NavigationPage>
</TabbedPage>
Run Code Online (Sandbox Code Playgroud)

将其设置MainPageApp.xaml.cs

public App()
{
    InitializeComponent();
    MainPage = new MyTabbedPage();
}
Run Code Online (Sandbox Code Playgroud)