2014-07-06 16 views
22

In un ContentPage Ho un all'interno di uno ScrollView. Il numero ListView è popolato (ItemSource è impostato) nel ContentPage quando viene chiamato OnAppearing e posso vedere che l'elenco è popolato nell'emulatore. L'orientamento StackLayout s è Vertical e sotto lo ListView ho uno Button.Xamarin.Forms: ListView all'interno di StackLayout: come impostare l'altezza?

Il mio problema è che indipendentemente da quanti elementi abbia il ListView, ottiene l'altezza di 53,33. Vorrei che l'altezza del ListView corrisponda all'altezza totale degli elementi in essa contenuti. Impostando HeightRequest è possibile impostare l'altezza di ListView su tutto ciò che desidero, ma poiché non conosco l'altezza degli articoli all'interno dello ListView, il risultato è che la distanza dal pulsante sottostante non è corretta e pertanto appare sgradevole. Ho provato a impostare VerticalOptions su e su Start e su altre impostazioni, ma questo non modifica l'altezza da 53,33 (e se provo a combinare utilizzando HeightRequest e Start, risulta che HeightRequest vince).

Come posso risolvere questo?

(scusate il distacco cross dalla Xamarin forum)

risposta

16

La soluzione nel mio caso è stato quello di mettere il ListView all'interno di un StackLayout e poi mettere che StackLayout all'interno del principale StackLayout. Quindi ho potuto impostare lo StackLayout interno (quello contenente lo ListView) con lo ListView, con lo ListView ottenuto lo spazio necessario (che ovviamente varia in base ai dati).

Ecco il codice principale:

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

Come potete vedere, ho aggiunto una nuova StackLayout con l'unico scopo di mettere il ListView al suo interno. Quindi ho inserito il numero listStackLayout all'interno del telefono principale _stackLayout.

vedere il post sul this Xamarin forum post per ulteriori informazioni

+0

Non riesco a ricreare la soluzione. Potresti essere più specifico? (per esempio, dite le opzioni di altri elementi, come lo stacklayout genitore) – nicks

+0

@NikaGamkrelidze Purtroppo non ho più accesso al codice. Scusate! – Halvard

+4

Mi sono imbattuto nello stesso problema ma la tua anima non mi ha aiutato. Non posso credere che questo problema sia in giro da 3 anni e ancora non lo hanno risolto. My ListView utilizza sempre più spazio di quello che avrebbe bisogno per visualizzare gli elementi. – Exa

6

Ho avuto lo stesso problema, e questa è stata l'unica cosa che ho risolto per me (in XAML):

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

Spero che funzioni!

6

Di seguito il codice ha funzionato per me,

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

ho avuto una lotta simile, con una soluzione leggermente diversa. Innanzitutto, l'impostazione di RowHeight su ListView sembrava essere fondamentale. Secondo, stavo imbattendo in un problema di sincronizzazione + vincolante. Se ListView è stato visualizzato e non ha contenuto, è stato impostato su un'altezza predefinita (mostrando lo spazio vuoto).Se mi sono allontanato da questa pagina e sono tornato, la dimensione andava bene.

Quindi il mio approccio era quello di legare la visibilità di ListView alla presenza (o alla mancanza) di qualcosa a cui era legato. Quindi, quando i dati tornavano, il ListView diventava visibile e aveva le dimensioni appropriate.

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