using System; using System.Diagnostics; using Windows.ApplicationModel; using Windows.ApplicationModel.Activation; using Windows.Phone.UI.Input; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Media.Animation; using Windows.UI.Xaml.Navigation; namespace FormulaOneApp.Classic.Windows { /// /// 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; HardwareButtons.BackPressed += HardwareButtons_BackPressed; } void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e) { Frame frame = Window.Current.Content as Frame; if (frame == null) return; if (frame.CanGoBack) { frame.GoBack(); e.Handled = true; } } /// /// 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 args) { var rootFrame = Window.Current.Content as Frame; // Do not repeat app initialization when the Window already has content, // just ensure that the window is active if (rootFrame == null) { // Create a Frame to act as the navigation context and navigate to the first page rootFrame = new Frame(); if (args.PreviousExecutionState == ApplicationExecutionState.Terminated) { //TODO: Load state from previously suspended application } // Place the frame in the current Window Window.Current.Content = rootFrame; } if (rootFrame.Content == null) { // When the navigation stack isn't restored navigate to the first page, // configuring the new page by passing required information as a navigation // parameter var setup = new Setup(rootFrame); setup.Initialize(); var start = Cirrious.CrossCore.Mvx.Resolve(); start.Start(); } // Ensure the current window is active 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(); } } }