2015-05-14 13 views
32

C'è un modo per creare un layout di stack verticale con un pulsante che prende il 30% del genitore e un input di testo che richiede il 70% del genitore ? Qualcosa del genere:Xamarin Form StackLayout: Come impostare la larghezza/altezza dei bambini in percentuale

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

Ma questo non funziona. L'unica soluzione finora è la creazione di un oggetto Grid completo e l'utilizzo di quello. Non ci sono altre soluzioni?

risposta

50

StackLayout non funziona molto bene con altezze variabili in questo scenario. I motori Xamarin Forms non sono così arrotondati come il motore WPF a questo punto. In pratica dovete andare

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

anche come nota a margine, solo griglie possono espandersi per tutta la larghezza o l'altezza del suo elemento genitore. StackLayout determina le dimensioni massime in base alla somma dei loro figli, a meno che non siano all'interno di una griglia e tu inserisca HorizontalOptions="Fill" e VerticalOptions="Fill".

L'unico altro modo per ottenere ciò è ottenere DeviceHeight e Width dal sistema operativo e impostare manualmente le altezze dei propri elementi. Un approccio complesso e solitamente imperfetto, che non consiglio.

+0

Grazie per aver anche menzionato il fatto che solo le Griglie sono in grado di allungare l'intera dimensione del genitore. Non lo sapevo, ma ho deciso che anche i layout di stack potevano allungarsi dal momento che occupavano tutto lo spazio della mia app (ma suppongo che il vero motivo sia perché ho creato figli con proprietà come VerticalOptions = FillAndExpand) –

+0

"Solo le griglie possono espandersi a tutta larghezza o altezza del suo elemento genitore "... sei sicuro? Che dire di VerticalOptions = LayoutOptions.FillAndExpand? Ho appena creato una barra laterale che è uno stacklayout e espande correttamente l'intera altezza dello schermo ... cosa mi manca? – jbyrd

+2

Il motore di layout da quando ho scritto questo (quasi un anno fa) è ampiamente diverso dalla versione attuale, sono stati apportati molti miglioramenti. La versione 2.0 (credo) includeva grandi miglioramenti del layout engine, penso che potrebbero averlo riscritto, ma non sono sicuro. –

0

Mentre si può fare questo con griglia, v'è il layout più adatto per esso AbsoluteLayout

È possibile impostare le proporzioni di posizione con questo: ". 5,1, 0,5, 0,1" AbsoluteLayout.LayoutBounds =

Problemi correlati