Я работаю над страницей, для которой требуются вложенные ListViews. Я заметил, что мой макет искажается ListView в StackLayout, который занимает гораздо больше места, чем требуется для записей.
Как оказалось, даже без каких-либо записей в xamarin ListView занимает гораздо больше места, чем ему могло бы понадобиться.
Кто-нибудь знает, как избавиться от этого поведения?
WPF (который отлично работает):
<StackPanel Background="Green">
<Label Content="hi" Background="Aqua"></Label>
<ListView Background="Red"></ListView>
</StackPanel>
Ксамарин:
public class CustomListView : ListView
{
public override SizeRequest GetSizeRequest(double widthConstraint, double heightConstraint)
{
var sizeRequest = base.GetSizeRequest(widthConstraint, heightConstraint);
var b = this.Behaviors;
return sizeRequest;
}
}
public class App : Application
{
public App()
{
// The root page of your application
MainPage = new ContentPage
{
BackgroundColor = Color.Green,
Content = new StackLayout
{
VerticalOptions = LayoutOptions.Start,
BackgroundColor = Color.Aqua,
Children = {
new Label {
XAlign = TextAlignment.Center,
Text = "Welcome to Xamarin Forms!"
}, new CustomListView()
{
BackgroundColor = Color.Red,
VerticalOptions = LayoutOptions.Start
}
}
}
};
}
}
В WPF вы можете увидеть ожидаемый результат, если ListView отображается в StackLayout - до сих пор я не смог измерить дочерние элементы и соответственно вернуть SizeRequest, чтобы исправить это.
В то время как некоторые другие элементы реализуют ILayoutController, ListView — нет.