Ejercicio: Uso de StackLayout para crear una interfaz de usuario
En este ejercicio, usará contenedores de StackLayout
anidados para organizar las vistas de la interfaz de usuario (UI). La primera captura de pantalla muestra el diseño implementado por el proyecto inicial y la segunda muestra el diseño para el proyecto completado. El trabajo consiste en usar contenedores de StackLayout
y LayoutOptions
para convertir el proyecto de inicio en la versión terminada.
Exploración de la solución de inicio
La solución de inicio contiene una aplicación de calculadora de propinas totalmente funcional. Empezará por explorar la interfaz de usuario y así comprender lo que hace la aplicación.
Con Visual Studio, abra la solución inicial en la carpeta exercise2/TipCalculator del repositorio que ha clonado al comienzo del ejercicio anterior.
Compile y ejecute la aplicación en su sistema operativo preferido.
Escriba un número en el cuadro de texto y use la aplicación para ver cómo funciona.
Experimente con los botones de cantidad de propinas y el control deslizante.
Cuando haya acabado, cierre la aplicación.
Abra MainPage.xaml. Observe que todas las vistas se colocan en un
VerticalStackLayout
, como se muestra en el siguiente marcado XAML:<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:TipCalculator" x:Class="TipCalculator.MainPage"> <VerticalStackLayout> <Label Text="Bill" /> <Entry x:Name="billInput" Placeholder="Enter Amount" Keyboard="Numeric" /> <Label Text="Tip" /> <Label x:Name="tipOutput" Text="0.00" /> <Label Text="Total" /> <Label x:Name="totalOutput" Text="0.00" /> <Label Text="Tip Percentage" /> <Label x:Name="tipPercent" Text="15%" /> <Slider x:Name="tipPercentSlider" Minimum="0" Maximum="100" Value="15" /> <Button Text="15%" Clicked="OnNormalTip" /> <Button Text="20%" Clicked="OnGenerousTip" /> <Button x:Name="roundDown" Text="Round Down" /> <Button x:Name="roundUp" Text="Round Up" /> </VerticalStackLayout> </ContentPage>
Corrección de la interfaz de usuario
Ahora que ha visto que la aplicación se ejecuta, puede mejorar su aspecto agregando contenedores de HorizontalStackLayout
. El objetivo es hacer que la aplicación tenga el aspecto de la captura de pantalla al comienzo del laboratorio.
Abra el archivo MainPage.xaml.
Agregue
40
unidades de relleno y10
unidades de espaciado aVerticalStackLayout
:<VerticalStackLayout Padding="40" Spacing="10">
Agregue un
HorizontalStackLayout
para agrupar el controlLabel
con el texto Bill con el campoEntry
situado debajo. Establezca la propiedadSpacing
en10
.Establezca el
WidthRequest
de FacturaLabel
en100
y la propiedadVerticalOptions
enCenter
. Estos cambios garantizan que la etiqueta esté alineada verticalmente con el campoEntry
.<HorizontalStackLayout Spacing="10"> <Label Text="Bill" WidthRequest="100" VerticalOptions="Center"/> <Entry ... /> </HorizontalStackLayout>
Agregue otro
HorizontalStackLayout
para agrupar el controlLabel
con el texto Tip con el controlLabel
denominado tipOutput. Establezca la propiedadSpacing
en10
y la propiedadMargin
en0,20,0,0
.Establezca el
WidthRequest
de PropinasLabel
en100
<HorizontalStackLayout Margin="0,20,0,0" Spacing="10"> <Label Text="Tip" WidthRequest="100" /> <Label .../> </HorizontalStackLayout>
Use un
HorizontalStackLayout
para agrupar el controlLabel
con el texto Total con el controlLabel
denominado totalOutput. Establezca la propiedadSpacing
en10
.Establezca el
WidthRequest
de TotalLabel
en100
<HorizontalStackLayout Spacing="10"> <Label Text="Total" WidthRequest="100" /> <Label .../> </HorizontalStackLayout>
Agregue otro
HorizontalStackLayout
para agrupar el controlLabel
con el texto Tip Percentage con el controlLabel
denominado tipPercent.Establezca la propiedad
VerticalOptions
de esteHorizontalStackLayout
enEnd
y establezca la propiedadSpacing
en10
:Establezca el
WidthRequest
de Porcentaje de propinasLabel
en100
<HorizontalStackLayout VerticalOptions="End" Spacing="10"> <Label Text="Tip Percentage" WidthRequest="100"/> <Label ... /> </HorizontalStackLayout>
Use un
HorizontalStackLayout
para agruparButton
con el título 15 % yButton
con el título 20 %.Establezca la propiedad
Margin
de esteStackLayout
en0,20,0,0
, y la propiedadSpacing
en10
:<HorizontalStackLayout Margin="0,20,0,0" Spacing="10"> <Button Text="15%" ... /> <Button Text="20%" ... /> </HorizontalStackLayout>
Agregue al final un
HorizontalStackLayout
para agruparButton
con el título, Round Down yButton
con el título Round Up.. Establezca la propiedadMargin
de esteStackLayout
en0,20,0,0
, y la propiedadSpacing
en10
:<HorizontalStackLayout Margin="0,20,0,0" Spacing="10"> <Button ... Text="Round Down" /> <Button ... Text="Round Up" /> </HorizontalStackLayout>
En los cuatro controles de botón, establezca la propiedad
HorizontalOptions
enCenter
y la propiedadWidthRequest
en150
. Por ejemplo:<Button Text="15%" WidthRequest="150" HorizontalOptions="Center" ... />
El marcado completo del lenguaje XAML de la página de contenido debe tener este aspecto:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:TipCalculator"
x:Class="TipCalculator.MainPage">
<VerticalStackLayout Padding="40" Spacing="10">
<HorizontalStackLayout Spacing="10">
<Label Text="Bill" WidthRequest="100" VerticalOptions="Center" />
<Entry x:Name="billInput" Placeholder="Enter Amount" Keyboard="Numeric" />
</HorizontalStackLayout>
<HorizontalStackLayout Margin="0,20,0,0" Spacing="10">
<Label Text="Tip" WidthRequest="100" />
<Label x:Name="tipOutput" Text="0.00" />
</HorizontalStackLayout>
<HorizontalStackLayout Spacing="10">
<Label Text="Total" WidthRequest="100"/>
<Label x:Name="totalOutput" Text="0.00" />
</HorizontalStackLayout>
<HorizontalStackLayout VerticalOptions="End" Spacing="10">
<Label Text="Tip Percentage" WidthRequest="100"/>
<Label x:Name="tipPercent" Text="15%" />
</HorizontalStackLayout>
<Slider x:Name="tipPercentSlider" Minimum="0" Maximum="100" Value="15" />
<HorizontalStackLayout Margin="0,20,0,0" Spacing="10">
<Button Text="15%" Clicked="OnNormalTip" WidthRequest="150" HorizontalOptions="Center"/>
<Button Text="20%" Clicked="OnGenerousTip" WidthRequest="150" HorizontalOptions="Center"/>
</HorizontalStackLayout>
<HorizontalStackLayout Margin="0,20,0,0" Spacing="10">
<Button x:Name="roundDown" Text="Round Down" WidthRequest="150" HorizontalOptions="Center"/>
<Button x:Name="roundUp" Text="Round Up" WidthRequest="150" HorizontalOptions="Center"/>
</HorizontalStackLayout>
</VerticalStackLayout>
</ContentPage>
Examen de los resultados
Vuelva a ejecutar la aplicación y observe las diferencias en la interfaz de usuario. Compruebe que los controles estén alineados correctamente y que tengan el tamaño y el espacio adecuados.
Ha usado contenedores de VerticalStackLayout
y HorizontalStackLayout
para mejorar la estética de una interfaz de usuario existente. Estos diseños son los paneles de diseño más simples, pero son lo suficientemente potentes para producir una interfaz de usuario razonable.