Xamarin.Forms ListView-Größe an Inhalt?
Ich habe ein ziemlich großes Formular (angepasst vor allem für tablets), die eine TabbedPage
verschachteln einer ScrollView
und eine vertikale StackPanel
mit vielen Kontrollen.
Habe ich einige Ereignisse, wo ich eine ListView
enthält ein paar single-line-items, und ich brauche Sie, um die Größe an den Inhalt.
Ich möchte, um loszuwerden, der scroll-bars, aber ich möchte es nicht mehr Platz als das, was erforderlich ist für seine Elemente.
Gibt es eine Möglichkeit (auch ein häßliches) zu erreichen, ohne zu schreiben, ein renderer x3-Plattformen?
Hier ist ein pseudo beschreiben, mein Baum:
<ContentPage>
<MasterDetailPage>
<MasterDetailPage.Detail>
<TabbedPage>
<ContentPage>
<ScrollView>
<StackPanel>
<!-- many controls-->
<ListView>
Gerendert, es gibt eine riesige Lücke kommt, nachdem die ListView
. Wie kann ich das vermeiden?
Versuchte ich Herumspielen mit der VerticalOptions
und HeightRequest
, nicht von denen gearbeitet.
Ich bin auf der Suche nach einer dynamischen Art und Weise (vorzugsweise ohne Vererbung) zu erreichen, ohne mit custom Renderern.
- in anderen Worten, Sie wollen, wickeln Sie die Inhalte der Daten in der ListView mit verlassen jeden Raum ?
- Ich will setzen die
ListView
Größe sich den Artikel " die notwendige Höhe, Optional mit einer max Höhe. - Ok, lassen, senden Sie den code
- Überprüfen Sie heraus meine Lösung
- vielleicht überspringen Sie die Liste anzeigen und fügen Sie die Elemente direkt zu Ihrem stack?
- Ich bin mit MVVM, Ihre Lösung zu match in einen Streit.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Basierend auf Lutaaya ist Antwort, ich habe ein Verhalten, dass automatisiert diese, Ermittlung und Einstellung der Zeilen-Höhe (Gist).
Verhalten:
Verwendung:
ItemTemplate
, die nur aus einemLabel
. Wenn ich einen festen Wert wie in Lutaaya die Lösung, es funktioniert (aber nur für eine bestimmte Art von layout natürlich).Ok Übernehmen Sie Ihre ListView Gefüllt ist mit NewsFeeds, ermöglicht die Verwendung einer
ObservableCollection
enthalten Daten, die zum füllen eines ListView wie folgt :XAML-Code :
C# - Code
Dann ordnen Sie die trends-Liste, um die ListView :
Dann haben wir einige Logik auf das ListView und die Daten , So dass der ListView die Daten Umbrochen , wie die Daten erhöht die ListView auch erhöht und Umgekehrt :
Daher der vollständige code ist :
Hoffe, es Hilft .
Ich kann mich grob zu kurz gedacht Sachen hier, aber nur indem
HasUnevenRows="True"
an das ListView-für mich gearbeitet.ListView
. Zumindest nicht, wenn ich schrieb meine Antwort. Sicher sein, dass ich versucht habe, das habe ich zuvor auch geschrieben meine Frage.Konnte ich einen event-handler, die berücksichtigt, die auf die sich verändernde Größe des ListView-Zellen. Hier ist es:
Rahmen kann geändert werden durch Raster, StackLayout, etc.
xaml.cs:
Ist die Frame-Anzeige (ListView.ItemTemplate anwenden), die Größe des Rahmens ändern.
Wir nehmen es tatsächlichen Höhe über Measure () - Methode, und legen Sie es in das Wörterbuch, das weiß über die aktuellen ListView und hält Rahmen in der Höhe. Wenn das Letzte Frame angezeigt wird, wir die Summe aller Höhen.
Wenn es keine Elemente, ListView_OnSizeChanged() setzt listView.HeightRequest 0.