No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Flex Layout Page y Navigation Page en Visual Studio

10/23
Recursos

Dominar la estructura y uso del Flex Layout Page y el Navigation Page es fundamental para construir aplicaciones móviles eficientes y organizadas. Estas herramientas de desarrollo en Visual Studio permiten gestionar eficazmente menús interactivos y navegación jerárquica, aspectos clave para mejorar la experiencia del usuario en tu aplicación.

¿Qué es y cómo funciona el Flex Layout Page?

El Flex Layout Page ofrece una solución práctica para aplicaciones que requieren menús laterales dinámicos. Este diseño presenta dos áreas principales:

  • Un menú lateral ubicado generalmente a la izquierda, donde puedes colocar diferentes opciones ajustadas a tus necesidades.
  • Una vista principal al lado derecho, donde la información específica se despliega según las acciones que realicen los usuarios.

En Visual Studio, se implementa cambiando el Content Page por la etiqueta específica:

<flayout.page>
    <flexlayout.page.flayout>
        <!-- Inserta aquí tu menú de opciones -->
    </flexlayout.page.flayout>
    <flexlayoutpage.dj>
        <!-- Inserta detalles adicionales aquí -->
    </flexlayoutpage.dj>
</flayout.page>

Podemos visualizar claramente ambos componentes gracias a las referencias entre páginas alojadas en diferentes carpetas mediante alias simplificados.

¿Para qué sirve el Navigation Page?

El Navigation Page simplifica el proceso de desplazamiento dentro de una aplicación mediante navegación jerárquica sencilla basada en una estructura de pila, siguiendo la lógica Last In, First Out (última en entrar, primera en salir). Esto es especialmente útil para:

  • Aplicaciones con múltiples vistas jerarquizadas.
  • Facilitar la navegación hacia adelante y hacia atrás.

Su implementación básica, junto al Flex Layout Page, se realiza agregando la etiqueta Navigation Page dentro del contenido principal.

<NavigationPage>
    <x:Arguments>
        <local:MainPage />
    </x:Arguments>
</NavigationPage>

¿Cómo integrar Flex Layout Page con Navigation Page?

Para obtener lo mejor de ambas estructuras, combínalas en tu proyecto como se mostró en el ejemplo, colocando Navigation Page dentro del detalle en Flex Layout. Esto permite que cualquier página de contenido pueda integrar navegación fluida.

Organizando el menú con Collection View

Para definir claramente las opciones del menú lateral, se utiliza Collection View que enlaza información desde una clase personalizada. Este enfoque facilita presentar elementos estructurados con ícono y descripción claramente desplegados.

Cada elemento dentro del Collection View necesitará información predefinida desde una clase con atributos específicos como título, ícono y tipo destino (target type).

¿Cómo definir fácilmente referencias entre páginas?

Las rutas y referencias entre páginas en tu proyecto se simplifican con alias definidos previamente, evitando repetición excesiva y facilitando modificaciones futuras. Por ejemplo, el uso del alias "views" facilita acceder rápidamente a la ruta específica de tu proyecto.

¿Cómo está estructurada la clase personalizada para Collection View?

Debes crear una clase pública sencilla con tres atributos importantes:

  • Título.
  • Ícono.
  • Tipo destino de la página objetivo.

Aquí un ejemplo simplificado de su estructura básica:

public class MenuItem {
    public string Titulo { get; set; }
    public string Icono { get; set; }
    public Type TargetType { get; set; }
}

Pon a prueba estas funcionalidades y personalízalas adaptándolas a las necesidades específicas de tu proyecto. Además, si realizas algún ajuste o tienes consultas específicas, compártelas en comentarios para enriquecer el aprendizaje y resolver posibles dudas.

Aportes 21

Preguntas 6

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Aunque parezca sencillo, me parecio un poco confusa esta clase. Creo que debe ser un paso a paso para los que estamos empezando en esto podamos enenderlo mejor.

Aquí hay un poco más de información sobre XML Namespaces para .NET MAUI:

https://learn.microsoft.com/en-us/dotnet/maui/xaml/namespaces/

Tuve el siguiente problema con el flyout, cree algunas pantallas para navegar y no funcionaba. Falto controlar el evento de selectionCanged para que cambie de pantalla, para que funcione si quieren navegar entre pantallas por el menu. Agreguen en FlyoutSamplePage.xaml.cs

namespace PagePlatziSample.Views.Pages.FlyoutSample;

public partial class FlyoutSamplePage : FlyoutPage
{
	public FlyoutSamplePage()
	{
		InitializeComponent(); 
        flyoutPage.collectionView.SelectionChanged += OnSelectionChanged;
    }

    void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        var item = e.CurrentSelection.FirstOrDefault() as FlyoutPageItem;
        if (item != null)
        {
            Detail = new NavigationPage((Page)Activator.CreateInstance(item.TargetType));
            if (!((IFlyoutPageController)this).ShouldShowSplitMode)
                IsPresented = false;
        }
    }
}

Aunque no fue fácil seguir el ritmo porque este ejemplo que explica ya tenía varios cambios realizados como las carpetas que agregaron, y otras par de cosas que vi , y aunque me tuve que repetir como 5 veces el video y revisar documentación, lo logré , coloque un icono tipo hamburguesa para abrir el menú y coloque varios iconos.


Agrega librería de íconos para utilizarlos más fácil!

Les dejo un link donde se explica como agregar un archivo ttf de fuentes y un helper al proyecto para su implementación:
Custom Fonts & Material Design Icons in .NET MAUI

Además les dejo como logré su utilización en el Flyout ya que es distinta al ejemplo que se muestra agregándolo al MainPage:

<CollectionView.ItemsSource>
            <x:Array Type="{x:Type Views:FlyoutPageItem}">
                <Views:FlyoutPageItem Title="Home"
                                      Icon="{x:Static Helpers:MaterialDesignIconFonts.Home}"
                                      TargetType="{x:Type local:MainPage}" />
            </x:Array>
        </CollectionView.ItemsSource>
        <CollectionView.ItemTemplate>
            <DataTemplate>
                <HorizontalStackLayout Margin="20">
                    <Image>
                        <Image.Source>
                            <FontImageSource
                                FontFamily="MaterialDesignIcons"
                                Glyph="{Binding Icon}"
                                Color="Black"/>
                        </Image.Source>
                    </Image>
                    <Label Margin="20,0"
                           Text="{Binding Title}"
                           FontSize="20"
                           VerticalOptions="Center"/>
                </HorizontalStackLayout>
            </DataTemplate>
        </CollectionView.ItemTemplate>

La etiqueta de Image debe tener apertura y cierre para anidarle subetiquetas, y es la de FontImageSource la que permite agregar como un Glyph en caracter que representa al ícono. Estoy a la orden por cualquier duda!

no me agrado mucho la forma de explicar, ya que no llevo de paso a paso de como hacerlo y esto es confuso para los que no tengan tanto conocimiento, recomendaria hacerlo de forma mas sencilla
Para los procesos de instalación aquí les comparto la información de Microsoft .NET MAUI 8. <https://learn.microsoft.com/es-es/dotnet/maui/what-is-maui?view=net-maui-8.0>
falta mas explicación mejor esta youtube que explica paso a paso cada código que inserta
Al crear la app en windows no genera la carpeta views
No he podido configurar la FlyoutPage... ![](https://static.platzi.com/media/user_upload/image-6ce8a967-5be9-4f2a-bf49-46ee22678ff8.jpg)
hola hay algun problema con esta version de MAUI ami no me sale Views del todo. sol main page
algo importante de mencionar después de crear los archivos (views) debes agregar una lineal que indique que vista es la principal en caso seria así ```js MainPage = new View.FlyoutSamplePage(); ``` MainPage = new View.FlyoutSamplePage();
es mac, y yo uso windows, por eso no me cogen esas librerias::. net6.0-maccatalyst tienen el proyecto en github para windows
Me pide que le ponga un usuario y clave, para poder bajar el proyecto, ayundemen porfavor me sale un empleo de movil , muy pronto, y necesito aprender la técnologia... ![](https://static.platzi.com/media/user_upload/image-0b3b8ac1-8362-409a-8b1a-e5e4b59a5dee.jpg)
![](https://static.platzi.com/media/user_upload/image-4933ed4a-4732-4266-b3cb-9ccf1b45f9e1.jpg)
Ayudeme porfavor necesito ese proyecto en el github, para bajarlo, e ir revisandolo. junto al video.
hola cual es el usuario y clave del github, me pide para bajar el ejemplo.. en los recursos de esta clase: <https://github.com/platzi/curso-netmaui-fundamentos-ui/commit/41167e7050c6000bf725637b928712b87254444f>
Pregunta general, es posible hacer un juego tipo "tapper" (hacer tap en cuadritos)? Se que en React Native se puede y en flutter, pero no se en esta plataforma, por eso pregunto, no encuentro data en google.
Buen dia Tratando de realizar los ejemplos que se muestran en el video, empeizo a tener complicaciones desde que trato de generar el FlyoutSamplePage ya que me marca errores desde la propiedad del Title, hasta el siguiente error al querer crear el Flyoutpage.Flyout y Detail Error: The attachable property 'Flyout' was not found in type 'FlyoutPage'. Me pudieran apoyar con algo de informacion al respecto
hola disculpa tiene el NavigationPage para bajar del repositorio de github
Si tienes dudas sobre qué es `xmlns`, se trata de un **XML Namespace**, es decir, un espacio de nombres en XAML. Su función es similar a la de los **namespaces** en C#, ya que permite organizar y referenciar clases dentro de un contexto específico. Al agregar `xmlns`, estás indicando en qué espacio de nombres buscar los elementos que utilizarás en tu XAML. El texto que aparece después de los dos puntos (`:`) es un **alias**, una forma abreviada de referirse a ese espacio de nombres, facilitando su uso en el código.