当我处理ListView
项目的Tap事件时,一切正常,但是当我在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>
这是OnClick处理程序:
async void Handle_Clicked(object sender, System.EventArgs e)
{
await Navigation.PushAsync(new Page1());
}
答案 0 :(得分:11)
仅在iOS中运行时会出现此错误。
在App.cs Rootpage(起始页)中,如下所示
public App()
{
MainPage=new NavigationPage(new LoginPage());
}
现在,我们可以在全球使用PushAsyn()
答案 1 :(得分:2)
您的App.xaml.cs
:
public App()
{
InitializeComponent();
var tabs = new TabbedPage();
tabs.Children.Add(new NavTestPage() { Title = "Tab title" });
MainPage = tabs;
}
您应该更改为:
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;
}
通过包裹NavigationPage
,您可以选择将页面推送到导航堆栈。 TabbedPage
本身就是标签,每个标签只有1页。这应该给你一个像这样的结构:
TabbedPage
NavigationPage
ContentPage
NavigationPage
ContentPage
NavigationPage
ContentPage
<强>更新强>
我猜你正在做的只是在XAML中将ContentPage
更改为TabbedPage
。这不是TabbedPage
的工作方式。您可能应该首先了解TabbedPage
实际上是如何运作的。
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>
将此设置为MainPage
中的App.xaml.cs
:
public App()
{
InitializeComponent();
MainPage = new MyTabbedPage();
}
答案 2 :(得分:0)
您应该将TabbedPage子页面放入NavigationPage。以下是Xamarin文档中的代码片段。
在Xaml中:
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:TabbedPageWithNavigationPage;assembly=TabbedPageWithNavigationPage"
x:Class="TabbedPageWithNavigationPage.MainPage">
<local:TodayPage />
<NavigationPage Title="Schedule" Icon="schedule.png">
<x:Arguments>
<local:SchedulePage />
</x:Arguments>
</NavigationPage>
</TabbedPage>
或代码:
public class MainPageCS : TabbedPage
{
public MainPageCS ()
{
var navigationPage = new NavigationPage (new SchedulePageCS ());
navigationPage.Icon = "schedule.png";
navigationPage.Title = "Schedule";
Children.Add (new TodayPageCS ());
Children.Add (navigationPage);
}
}
答案 3 :(得分:0)
在此错误中它会找到根页面,如果我们使用的是主详细信息页面,那么我们只需要为详细信息页面设置导航。因此,以下将是最好的解决方案。
((RootPage)Application.Current.MainPage).Detail.Navigation.PushAsync(new SearchPage());