Compartir vía


Mostrar varias vistas con ApplicationView

Ayude a los usuarios a ser más productivos al permitirles ver partes independientes de la aplicación en ventanas independientes. Al crear varias ventanas para una aplicación, cada ventana se comporta de forma independiente. La barra de tareas muestra cada ventana por separado. Los usuarios pueden mover, cambiar de tamaño, mostrar y ocultar ventanas de aplicaciones de forma independiente y pueden cambiar entre ventanas de aplicaciones como si fueran aplicaciones independientes. Cada ventana funciona en su propio subproceso.

API importantes: ApplicationViewSwitcher, CreateNewView

¿Qué es una vista?

Una vista de aplicación es el emparejamiento 1:1 de un subproceso y una ventana que la aplicación usa para mostrar contenido. Se representa mediante un objeto Windows.ApplicationModel.Core.CoreApplicationView .

Las vistas se administran mediante el objeto CoreApplication . Llame a CoreApplication.CreateNewView para crear un objeto CoreApplicationView . El CoreApplicationView reúne una CoreWindow y un CoreDispatcher (almacenados en las propiedades CoreWindow y Dispatcher). Puedes pensar en el CoreApplicationView como el objeto que usa Windows Runtime para interactuar con el sistema principal de Windows.

Normalmente no trabajas directamente con el CoreApplicationView. En lugar de eso, Windows Runtime proporciona la clase ApplicationView en el espacio de nombres Windows.UI.ViewManagement. Esta clase proporciona propiedades, métodos y eventos que se usan cuando la aplicación interactúa con el sistema de ventanas. Para trabajar con una ApplicationView, llame al método estático ApplicationView.GetForCurrentView, que obtiene una instancia de ApplicationView asociada al subproceso actual de CoreApplicationView.

Del mismo modo, el framework XAML ajusta el objeto CoreWindow en un objeto Windows.UI.XAML.Window. En una aplicación XAML, normalmente interactúas con el objeto Window de en lugar de trabajar directamente con el CoreWindow.

Mostrar una nueva vista

Aunque cada diseño de aplicación es único, se recomienda incluir un botón "nueva ventana" en una ubicación predecible, como la esquina superior derecha del contenido que se puede abrir en una nueva ventana. Considere también la posibilidad de incluir una opción de menú contextual para "Abrir en una nueva ventana".

Echemos un vistazo a los pasos para crear una nueva vista. Aquí, la nueva vista se inicia en respuesta a un clic de botón.

private async void Button_Click(object sender, RoutedEventArgs e)
{
    CoreApplicationView newView = CoreApplication.CreateNewView();
    int newViewId = 0;
    await newView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
    {
        Frame frame = new Frame();
        frame.Navigate(typeof(SecondaryPage), null);   
        Window.Current.Content = frame;
        // You have to activate the window in order to show it later.
        Window.Current.Activate();

        newViewId = ApplicationView.GetForCurrentView().Id;
    });
    bool viewShown = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newViewId);
}

Para mostrar una nueva vista

  1. Llame a CoreApplication.CreateNewView para crear una nueva ventana y un subproceso para el contenido de la vista.

    CoreApplicationView newView = CoreApplication.CreateNewView();
    
  2. Realice un seguimiento del id. de de la nueva vista. Utilizas esto para mostrar la vista más adelante.

    Es posible que quiera considerar la posibilidad de crear alguna infraestructura en la aplicación para ayudar con el seguimiento de las vistas que cree. Consulte la clase ViewLifetimeControl en el ejemplo MultipleViews.

    int newViewId = 0;
    
  3. En el nuevo subproceso, rellene la ventana.

    Use el método CoreDispatcher.RunAsync para programar el trabajo en el subproceso de la interfaz de usuario para la nueva vista. Se usa una expresión lambda de para pasar una función como argumento al método RunAsync de. El trabajo que realiza en la función lambda se produce en el hilo de la nueva vista.

    En XAML, normalmente agregas una frame de a la Windowla propiedad Content de y, a continuación, navegas por el frame de a un página de XAML donde has definido el contenido de la aplicación. Para obtener más información sobre marcos y páginas, consulta navegación entre pares entre dos páginas.

    Después de rellenar el nuevo , debe llamar al método 's Activate para mostrar más adelante la ventana. Este trabajo se produce en el subproceso de la nueva vista, por lo que se activa la nueva Ventana.

    Por último, obtenga el Id de la vista nueva que utilizará para mostrarla más adelante. De nuevo, este trabajo está en el subproceso de la nueva vista, de modo que ApplicationView.GetForCurrentView obtiene la Id de de la nueva vista.

    await newView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
    {
        Frame frame = new Frame();
        frame.Navigate(typeof(SecondaryPage), null);   
        Window.Current.Content = frame;
        // You have to activate the window in order to show it later.
        Window.Current.Activate();
    
        newViewId = ApplicationView.GetForCurrentView().Id;
    });
    
  4. Muestre la nueva vista llamando a ApplicationViewSwitcher.TryShowAsStandaloneAsync.

    Después de crear una nueva vista, puede mostrarla en una nueva ventana llamando al método ApplicationViewSwitcher.TryShowAsStandaloneAsync . El parámetro viewId de este método es un entero que identifica de forma única cada una de las vistas de la aplicación. Puede recuperar la vista Id mediante la propiedad ApplicationView.Id o el método ApplicationView.GetApplicationViewIdForWindow.

    bool viewShown = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newViewId);
    

La vista principal

La primera vista que se crea cuando se inicia la aplicación se denomina vista principal. Esta vista se almacena en la propiedad CoreApplication.MainView y su propiedad IsMain es true. No creas esta vista; esta es creada por la aplicación. El subproceso de la vista principal actúa como administrador de la aplicación y todos los eventos de activación de la aplicación se entregan en este subproceso.

Si las vistas secundarias están abiertas, la ventana de la vista principal se puede ocultar, por ejemplo, haciendo clic en el botón Cerrar (x) de la barra de título de la ventana, pero su subproceso permanece activo. Llamar a Cerrar en la ventana de de la vista principal hace que se produzca un InvalidOperationException. (Usa Application.Exit para cerrar la aplicación). Si finaliza el subproceso de la vista principal, se cierra la aplicación.

Vistas secundarias

Otras vistas, incluidas todas las vistas que se creen al llamar a CreateNewView en el código de tu aplicación, son vistas secundarias. Tanto la vista principal como las vistas secundarias se almacenan en la colección CoreApplication.Views . Normalmente, se crean vistas secundarias en respuesta a una acción del usuario. En algunos casos, el sistema crea vistas secundarias para la aplicación.

Nota:

Puedes usar la característica acceso asignado de Windows para ejecutar una aplicación en modo de pantalla completa. Al hacerlo, el sistema crea una vista secundaria para presentar la interfaz de usuario de la aplicación encima de la pantalla de bloqueo. No se permiten vistas secundarias creadas por la aplicación, por lo que si intenta mostrar su propia vista secundaria en modo de pantalla completa, se produce una excepción.

Cambiar de una vista a otra

Considere la posibilidad de proporcionar una manera de que el usuario navegue desde una ventana secundaria a su ventana primaria. Para ello, use el método ApplicationViewSwitcher.SwitchAsync . Llame a este método desde el subproceso de la ventana actual y pase el identificador de vista de la ventana a la que desea cambiar.

await ApplicationViewSwitcher.SwitchAsync(viewIdToShow);

Al usar SwitchAsync, puede elegir si desea cerrar la ventana inicial y quitarla de la barra de tareas especificando el valor de ApplicationViewSwitchingOptions.