我的项目有问题,我在使用MasterDetailPage
和简单的ListView
并使用本地名称空间也用ListView
调用了他内部的另一个页面,结果是THIS,问题是,即工具栏和列表视图之间的空白,但是如果我尝试在不使用MasterDetailPage的情况下浏览此页面,则列表视图在没有此空白的情况下可以正常工作,然后选中HERE
App.cs导航到MenuPage.Xaml
MainPage = new NavigationPage(new MenuPage());
MenuPage.XAML
`<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Gone.MenuPage"
xmlns:local="clr-namespace:Gone;assembly=Gone">
<MasterDetailPage.Master>
<ContentPage Title="Menu">
<ListView BackgroundColor="Transparent"
SeparatorVisibility="Default"
HasUnevenRows="True"
x:Name="listView">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Padding="2" Orientation="Horizontal">
<Image Aspect="Fill" WidthRequest="60" HeightRequest="60" Source="{Binding image}"/>
<StackLayout Padding="5,18,0,0" Orientation="Vertical">
<Label TextColor="Black" Text="{Binding title}"/>
</StackLayout>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentPage>
</MasterDetailPage.Master>
<MasterDetailPage.Detail>
<local:MainPage/>
</MasterDetailPage.Detail>
</MasterDetailPage>`
MainPage.Xaml
<ListView BackgroundColor="Transparent"
SeparatorVisibility="Default"
HasUnevenRows="True"
x:Name="listView">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Horizontal">
<Image Aspect="AspectFill" WidthRequest="130" HeightRequest="130" Source="{Binding image}"/>
<StackLayout Padding="20" Orientation="Vertical">
<Label LineBreakMode="WordWrap" FontSize="17" TextColor="#4CAF50" Text="{Binding title}"/>
<Label FontAttributes="Bold" TextColor="#2962FF" Text="{Binding price}"/>
<Label TextColor="#455A64" Text="{Binding date}"/>
</StackLayout>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
最佳答案
如果将MasterDetailPage与NavigationPage一起使用,则会发生这种情况。
不要将MasterDetailPage声明为新的NavigationPage(new MasterDetailPage())。
而是将MasterDetailPage声明为var masterDetailPage = new MasterDetailPage()。
之后,使用masterDetailPage.Detail = new NavigationPage(new ContentPage());
因此,如果您既可以通过masterDetail进行导航,又可以通过导航进行导航,那么您将获得多个NavigationPages。而且您将无法仅使用Navigation.PushAsync(somePage)。取而代之的是,您必须使用当前的NavigationPage实例,例如:((NavigationPage)(this.Detail))。PushAsync(new ContentPage());