2015-05-14 7 views
32

Gibt es eine Möglichkeit, ein vertikales Stapellayout mit einer Schaltfläche zu erstellen, die 30% des übergeordneten Elements und eine Texteingabe 70% des übergeordneten Elements übernimmt ? Etwas wie dieses:Xamarin Forms StackLayout: Festlegen der Breite/Höhe von untergeordneten Elementen auf Prozentwerte

<StackLayout Orientation="Vertical"> 
    <Entry Height="70%"></Entry> 
    <Button Height="30%">Click me</Button> 
</StackLayout> 

Aber das funktioniert nicht. Einzige Lösung ist bisher, ein komplettes Grid-Objekt zu erstellen und dieses zu verwenden. Gibt es keine anderen Lösungen?

Antwort

50

StackLayout geht in diesem Szenario nicht sehr gut mit unterschiedlichen Höhen. Die Xamarin Forms-Engines sind zu diesem Zeitpunkt nicht so rund wie die WPF-Engine. Grundsätzlich müssen Sie gehen

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="7*" /> 
     <RowDefinition Height="3*" /> 
    </Grid.RowDefinitions> 
    <Entry Grid.Row="0" VerticalOptions="Fill"></Entry> 
    <Button Grid.Row="1" VerticalOptions="Fill">Click me</Button> 
</Grid> 

Auch als eine Randnotiz, nur Grids auf die volle Breite oder Höhe des übergeordneten Element erweitern. StackLayouts bestimmen ihre maximale Größe durch die Summe ihrer untergeordneten Elemente, es sei denn, sie befinden sich in einem Grid und Sie geben und VerticalOptions="Fill" ein.

Der einzige andere Weg, den Sie erreichen könnten, ist, die DeviceHeight und die Breite vom Betriebssystem zu erhalten und die Höhen Ihrer Elemente manuell einzustellen. Ein komplexer und meist fehlerhafter Ansatz, den ich nicht empfehlen kann.

+0

Vielen Dank für die Erwähnung, dass nur Grids in der Lage sind, die gesamte Größe des Elternteils zu vergrößern. Ich wusste das nicht, aber ich dachte, Stack Layouts könnten auch dehnen, da sie den ganzen Platz in meiner App beanspruchen (Aber ich glaube der wahre Grund ist, weil ich Kinder mit Eigenschaften wie VerticalOptions = FillAndExpand) –

+0

"nur Grids können erweitern zur vollen Breite oder Höhe des übergeordneten Elements ".... bist du sicher? Was ist mit VerticalOptions = LayoutOptions.FillAndExpand? Ich habe gerade eine Seitenleiste erstellt, die ein Stacklayout ist und die gesamte Höhe des Bildschirms korrekt erweitert. Was fehlt mir? – jbyrd

+2

Die Layout-Engine von damals, als ich dies schrieb (vor fast einem Jahr), unterscheidet sich stark von der aktuellen Version, es wurden viele Verbesserungen vorgenommen. Version 2.0 (glaube ich) beinhaltete große Layout-Engine-Verbesserungen, ich denke, sie haben es vielleicht sogar neu geschrieben, aber nicht sicher. –

0

Während Sie dies mit Gitter tun können, gibt es mehrere geeignete Layout für sie AbsoluteLayout

Sie Position Proportionen mit diesem Satz kann: „. 5,1, 0,5, 0,1" AbsoluteLayout.LayoutBounds =

Verwandte Themen