2016-09-15 196 views
2

我有我的項目出了問題,我使用MasterDetailPage用一個簡單的ListView和使用本地命名空間來調用另一個頁面的他體內有ListView過了,有THIS結果,問題是,工具欄和列表視圖之間的空白,但如果我嘗試瀏覽這個很頁面不使用MasterDetailPage,列表視圖工作正常,沒有這個空白,並且您檢查HERE如何擺脫MasterDetailPage空白窗體Xamarin

應用。 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> 

回答

1

出現這種情況,如果您使用MasterDetailPage與NavigationPage。

不要聲明MasterDetailPage新NavigationPage(新MasterDetailPage())。

相反聲明MasterDetailPage爲VAR masterDetailPage =新MasterDetailPage()。 之後,使用masterDetailPage.Detail = new NavigationPage(new ContentPage());

所以,如果你有導航既通過masterDetail和導航,你會拿出幾個NavigationPages。而且你將無法使用Navigation.PushAsync(somePage)。而不是它,你將不得不使用當前的NavigationPage實例,如:((NavigationPage)(this.Detail))。PushAsync(new ContentPage());

1

一個臨時的解決方案 創建Android專案一個CustomMasterDetailRenderer

[assembly: ExportRenderer(typeof(MasterDetailPage), typeof(CustomMasterDetailRenderer))] 
namespace Your.Name.Space 
{ 
    public class CustomMasterDetailRenderer : MasterDetailPageRenderer 
    { 
     public override void AddView(Android.Views.View child) 
     { 
      child.GetType().GetRuntimeProperty("TopPadding").SetValue(child, 0); 
      var padding = child.GetType().GetRuntimeProperty("TopPadding").GetValue(child); 

      base.AddView(child); 
     } 
    } 
} 

也許需要設置Padding 0您view

感謝西爾維亞·馬丁內斯: https://forums.xamarin.com/discussion/comment/244966/#Comment_244966