2016-09-15 4 views
2

내가 내 프로젝트에 문제가있는 양식, 나는 간단한 ListViewMasterDetailPage을 사용하고 너무 ListView와 그 안에 다른 페이지를 호출하는 로컬 네임 스페이스를 사용하고, THIS을 가지고있어 결과, 문제는 툴바와 listview 사이의 공백이지만,이 아주 빈 페이지없이 MasterDetailPage를 사용하지 않고 탐색하려고하면 listview는이 공백없이 잘 작동하고 확인할 수 있습니다. HEREMasterDetailPage 빈 공간을 제거하는 방법을 자 마린은

응용 프로그램. 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

당신이 NavigationPage와 MasterDetailPage를 사용하는 경우가 발생합니다.

MasterDetailPage를 새 NavigationPage (새 MasterDetailPage())로 선언하지 마십시오.

대신 var masterDetailPage = new MasterDetailPage()로 MasterDetailPage를 선언하십시오. 그 후 사용 masterDetailPage.Detail = 새 NavigationPage (새 ContentPage());

따라서 masterDetail과 탐색을 통한 탐색이있는 경우 여러 가지 NavigationPages가 제공됩니다. 그리고 Navigation.PushAsync (somePage) 만 사용할 수는 없습니다. 대신에 다음과 같이 현재 NavigationPage 인스턴스를 사용해야합니다 : ((NavigationPage) (this.Detail)). PushAsync (new ContentPage());

1

임시 해결책은 은 안드로이드 프로젝트에 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); 
     } 
    } 
} 

viewPadding 0을 설정합니다.

덕분에 실비아 마르티네즈 : https://forums.xamarin.com/discussion/comment/244966/#Comment_244966

관련 문제