如何摆脱MasterDetailPage空白空间Xamarin窗体
本文关键字:Xamarin 窗体 空间 空白 何摆脱 MasterDetailPage | 更新日期: 2023-09-27 18:07:12
我对我的项目有一个问题,我使用MasterDetailPage
与一个简单的ListView
,并使用一个本地命名空间来调用他内部的另一个页面与ListView
,并有这个结果,问题是,工具栏和列表视图之间的空白,但如果我试图在不使用MasterDetailPage的情况下导航这个页面,列表视图工作得很好没有这个空白,你检查这里
App.cs导航到menpage。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>`
主页。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>
临时解决方案是在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);
}
}
}
也许需要在你的view
中设置Padding
0。
感谢Sylvia Martinez:https://forums.xamarin.com/discussion/comment/244966/Comment_244966
如果将MasterDetailPage与NavigationPage一起使用,就会发生这种情况。
不要将MasterDetailPage声明为new NavigationPage(new MasterDetailPage())。
将MasterDetailPage声明为var MasterDetailPage = new MasterDetailPage()。之后使用masterDetailPage。Detail = new NavigationPage(new ContentPage());
如果你通过masterDetail和navigation都有导航,你会想出几个NavigationPages。你不能只使用navigation。pushasync (somePage)取而代之的是,你必须使用当前的NavigationPage实例,如:((NavigationPage)(this.Detail))。PushAsync(新ContentPage ());