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
40unidades de relleno y10unidades de espaciado aVerticalStackLayout:<VerticalStackLayout Padding="40" Spacing="10">Agregue un
HorizontalStackLayoutpara agrupar el controlLabelcon el texto Bill con el campoEntrysituado debajo. Establezca la propiedadSpacingen10.Establezca el
WidthRequestde FacturaLabelen100y la propiedadVerticalOptionsenCenter. 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
HorizontalStackLayoutpara agrupar el controlLabelcon el texto Tip con el controlLabeldenominado tipOutput. Establezca la propiedadSpacingen10y la propiedadMarginen0,20,0,0.Establezca el
WidthRequestde PropinasLabelen100<HorizontalStackLayout Margin="0,20,0,0" Spacing="10"> <Label Text="Tip" WidthRequest="100" /> <Label .../> </HorizontalStackLayout>Use un
HorizontalStackLayoutpara agrupar el controlLabelcon el texto Total con el controlLabeldenominado totalOutput. Establezca la propiedadSpacingen10.Establezca el
WidthRequestde TotalLabelen100<HorizontalStackLayout Spacing="10"> <Label Text="Total" WidthRequest="100" /> <Label .../> </HorizontalStackLayout>Agregue otro
HorizontalStackLayoutpara agrupar el controlLabelcon el texto Tip Percentage con el controlLabeldenominado tipPercent.Establezca la propiedad
VerticalOptionsde esteHorizontalStackLayoutenEndy establezca la propiedadSpacingen10:Establezca el
WidthRequestde Porcentaje de propinasLabelen100<HorizontalStackLayout VerticalOptions="End" Spacing="10"> <Label Text="Tip Percentage" WidthRequest="100"/> <Label ... /> </HorizontalStackLayout>Use un
HorizontalStackLayoutpara agruparButtoncon el título 15 % yButtoncon el título 20 %.Establezca la propiedad
Marginde esteStackLayouten0,20,0,0, y la propiedadSpacingen10:<HorizontalStackLayout Margin="0,20,0,0" Spacing="10"> <Button Text="15%" ... /> <Button Text="20%" ... /> </HorizontalStackLayout>Agregue al final un
HorizontalStackLayoutpara agruparButtoncon el título, Round Down yButtoncon el título Round Up.. Establezca la propiedadMarginde esteStackLayouten0,20,0,0, y la propiedadSpacingen10:<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
HorizontalOptionsenCentery la propiedadWidthRequesten150. 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.