style example agrupar xamarin.forms

example - Xamarin.Forms: ListView dentro de StackLayout: ¿Cómo establecer la altura?



xamarin forms listview itemtemplate example (6)

A continuación el código funcionó para mí,

protected override void OnAppearing() { base.OnAppearing(); listViewOrderCloths.HeightRequest = model.ListOrderedCloths.Count*100)/2 ; }

En una ContentPage tengo un ListView dentro de un StackLayout dentro de un ScrollView . ListView se llena ( ItemSource está configurado) en ContentPage cuando se llama a OnAppearing y puedo ver que la lista se llena en el emulador. La orientación de StackLayout es Vertical y debajo de ListView tengo un Button .

Mi problema es que no importa cuántos elementos tenga el ListView , tiene la altura de 53.33. Me gustaría que la altura de ListView coincida con la altura total de los elementos que contiene. Al establecer HeightRequest , puedo configurar la altura de ListView a cualquier cosa que desee, pero como no conozco la altura de los elementos dentro de ListView el resultado es que la distancia al botón de abajo es incorrecta y, por lo tanto, se ve fea. He intentado establecer VerticalOptions tanto en ListView como en StackLayout para Start y otras configuraciones, pero esto no cambia la altura de 53.33 (y si trato de combinar usando HeightRequest y Start , resulta que HeightRequest gana).

¿Como puedo resolver esto?

(disculpe la publicación cruzada del foro de Xamarin )


En Android, mi tabla creada en código estaba dejando espacios por encima y por debajo.

Esto lo arregló ...

HeightRequest="1000000"

Creo que tengo la solución más pirata.


La solución en mi caso fue colocar el ListView dentro de un StackLayout y luego colocar ese StackLayout dentro del StackLayout principal. Luego podría establecer VerticalOptions = LayoutOptions.FillAndExpand en el StackLayout interno (el que contiene el ListView ) con el resultado de que el ListView obtuvo el espacio que necesitaba (que por supuesto varía según los datos).

Aquí está el código principal:

listView.ItemsSource = alternativeCells; listView.ItemSelected += ListViewOnItemSelected; var listStackLayout = new StackLayout { VerticalOptions = LayoutOptions.FillAndExpand, Orientation = StackOrientation.Vertical }; listStackLayout.Children.Add(listView); _stackLayout.Children.Add(listStackLayout);

Como puede ver, agregué un nuevo StackLayout con el único propósito de colocar el ListView en su interior. Luego puse ese listStackLayout dentro del _stackLayout principal.

Vea la publicación en este post del foro de Xamarin para más información.



Tuve el mismo problema, y ​​esto fue lo único que resolví por mí (en XAML):

<StackLayout Orientation="Vertical" VerticalOptions="Fill" HorizontalOptions="StartAndExpand"> <ListView VerticalOptions="FillAndExpand" RowHeight="<some row height>"> </ListView> </StackLayout>

¡Espero que funcione!


Tuve una lucha similar, con una solución ligeramente diferente. En primer lugar, establecer un RowHeight en el ListView parecía ser fundamental. En segundo lugar, me encontré con un problema de tiempo de enlace +. Si se visualizó ListView y no tenía contenido, se configuró a una altura predeterminada (mostrando el espacio vacío). Si me mudé fuera de esta página y volví, el tamaño estaba bien.

Así que mi enfoque fue vincular la visibilidad de ListView a la presencia (o falta de) algo a lo que se vincula. Luego, cuando los datos regresaron, el ListView se hizo visible y tenía el tamaño adecuado.

<ListView x:Name="lvSettlements" ItemsSource="{Binding RecentSettlements}" VerticalOptions="FillAndExpand" RowHeight="25" IsVisible="{Binding RecentSettlements, Converter={StaticResource nullConverter}}"> ...SNIP... </ListView>