using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.InteropServices.WindowsRuntime; using Windows.ApplicationModel; using Windows.ApplicationModel.Activation; using Windows.Foundation; using Windows.Foundation.Collections; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls.Primitives; using Windows.UI.Xaml.Data; using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Media.Animation; using Windows.UI.Xaml.Navigation; // La plantilla Aplicación vacía está documentada en http://go.microsoft.com/fwlink/?LinkId=391641 namespace Xamarin.Forms_Windows.WindowsPhone81 { /// /// Proporciona un comportamiento específico de la aplicación para complementar la clase Application predeterminada. /// public sealed partial class App : Application { private TransitionCollection transitions; /// /// Inicializa el objeto de aplicación Singleton. Esta es la primera línea de código creado /// ejecutado y, como tal, es el equivalente lógico de main() o WinMain(). /// public App() { this.InitializeComponent(); this.Suspending += this.OnSuspending; } /// /// Se invoca cuando la aplicación la inicia normalmente el usuario final. Se usarán otros puntos /// de entrada cuando la aplicación se inicie para abrir un archivo específico, para mostrar /// resultados de la búsqueda, etc. /// /// Información detallada acerca de la solicitud y el proceso de inicio. protected override void OnLaunched(LaunchActivatedEventArgs e) { #if DEBUG if (System.Diagnostics.Debugger.IsAttached) { this.DebugSettings.EnableFrameRateCounter = true; } #endif Frame rootFrame = Window.Current.Content as Frame; // No repetir la inicialización de la aplicación si la ventana tiene contenido todavía, // solo asegurarse de que la ventana está activa. if (rootFrame == null) { // Crear un marco para que actúe como contexto de navegación y navegar a la primera página. rootFrame = new Frame(); // TODO: Cambiar este valor a un tamaño de caché adecuado para la aplicación rootFrame.CacheSize = 1; Forms.Forms.Init(e); if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) { // TODO: Cargar el estado de la aplicación suspendida previamente } // Poner el marco en la ventana actual. Window.Current.Content = rootFrame; } if (rootFrame.Content == null) { // Quita la navegación de transición en el inicio. if (rootFrame.ContentTransitions != null) { this.transitions = new TransitionCollection(); foreach (var c in rootFrame.ContentTransitions) { this.transitions.Add(c); } } rootFrame.ContentTransitions = null; rootFrame.Navigated += this.RootFrame_FirstNavigated; // Cuando no se restaura la pila de navegación para navegar a la primera página, // configurar la nueva página al pasar la información requerida como parámetro // de navegación if (!rootFrame.Navigate(typeof(MainPage), e.Arguments)) { throw new Exception("Failed to create initial page"); } } // Asegurarse de que la ventana actual está activa. Window.Current.Activate(); } /// /// Restaura las transiciones de contenido después de iniciar la aplicación. /// /// Objeto al que se asocia el controlador. /// Detalles sobre el evento de navegación. private void RootFrame_FirstNavigated(object sender, NavigationEventArgs e) { var rootFrame = sender as Frame; rootFrame.ContentTransitions = this.transitions ?? new TransitionCollection() { new NavigationThemeTransition() }; rootFrame.Navigated -= this.RootFrame_FirstNavigated; } /// /// Se invoca al suspender la ejecución de la aplicación. El estado de la aplicación se guarda /// sin saber si la aplicación se terminará o se reanudará con el contenido /// de la memoria aún intacto. /// /// Origen de la solicitud de suspensión. /// Detalles sobre la solicitud de suspensión. private void OnSuspending(object sender, SuspendingEventArgs e) { var deferral = e.SuspendingOperation.GetDeferral(); // TODO: Guardar el estado de la aplicación y detener toda actividad en segundo plano deferral.Complete(); } } }