2016-05-31 5 views
0

Ich arbeite an einer Seite, die verschachtelte ListViews erfordert. Ich bemerkte, dass mein Layout durch eine ListView in einem StackLayout verzerrt wurde, die viel mehr Platz verbrauchte, als die Einträge es erfordern würden.Wie kann ich meine ListView verbrauchen so wenig Platz wie nötig in Xamarin.Forms

Wie sich herausstellt, verbraucht der ListView auch ohne Einträge auf Xamarin viel mehr Platz, als er möglicherweise benötigen würde.

Kann jemand dieses Verhalten loswerden?

WPF (was in Ordnung macht):

wpf rendering

<StackPanel Background="Green"> 
     <Label Content="hi" Background="Aqua"></Label> 
     <ListView Background="Red"></ListView> 
    </StackPanel> 

Xamarin:

xamarin rendering

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 
        } 
       } 
      } 
     }; 
    } 
} 

In WPF Sie sehen das Ergebnis kann ich erwarten würde, wenn die ListView wird in einem StackLayout angezeigt - bisher konnte ich nicht um Kinder zu messen und die SizeRequest entsprechend zurückzugeben, um dies zu beheben.

Während einige andere Elemente ILayoutController implementieren - ListView nicht.

Antwort

0

StackLayout in Xamarin.Forms versuchen, so viel Platz wie vom Parent zur Verfügung gestellt zu füllen. Sie können weitere Informationen darüber in here erhalten.

daher im Kodex, können Sie versuchen, die Höhe der entweder in der Listview zu steuern oder die StackLayout durch Verwendung von entweder HorizontalOptions oder VerticalOptions machen.

new StackLayout 
{ 
    Children = 
    { 
     new CustomListView() 
     { 
      BackgroundColor = Color.Red, 
      VerticalOptions = LayoutOptions.Start, 
      HeightRequest = 100 // Can be used even in ListView 
     } 
    }, 
    HeightRequest = 100 // Can be used even in StackLayout 
} 

Dies ist die Ausgabe ich bekomme, wenn HeightRequest entweder Wege einstellen. Output of the above code snippet

+0

die manuelle Einstellung der Höhe ist keine Option. Ich denke, das ist nur eine schlechte Implementierung, wenn es sich nicht wie in WPF verhält ... Wenn ich möchte, dass es den Raum ausfüllt, würde ich ein Gitter verwenden. – Dbl

+1

Auch wenn ich die Listview durch ein Label ersetze, wird es nicht konsumiere die verbleibende Höhe im Elternteil. In diesem Fall handelt es sich nur um die Listenansicht – Dbl

Verwandte Themen