Ejemplo n.º 1
0
        //https://docs.microsoft.com/en-us/uwp/api/Windows.UI.Xaml.Application?view=winrt-19041
        public IObservable <PlatformState> WhenStateChanged() => Observable
        .Create <PlatformState>(ob =>
        {
            var fgHandler = new LeavingBackgroundEventHandler((sender, target) => ob.OnNext(PlatformState.Foreground));
            var bgHandler = new EnteredBackgroundEventHandler((sender, target) => ob.OnNext(PlatformState.Background));

            if (this.app == null)
            {
                ob.OnNext(PlatformState.Background);
            }
            else
            {
                this.app.LeavingBackground += fgHandler;
                this.app.EnteredBackground += bgHandler;
            }
            return(() =>
            {
                if (this.app != null)
                {
                    this.app.LeavingBackground -= fgHandler;
                    this.app.EnteredBackground -= bgHandler;
                }
            });
        })
        .Do(x => this.Status = x);
Ejemplo n.º 2
0
        /// <summary>
        /// Wird aufgerufen, wenn die Anwendung durch den Endbenutzer normal gestartet wird. Weitere Einstiegspunkte
        /// werden z. B. verwendet, wenn die Anwendung gestartet wird, um eine bestimmte Datei zu öffnen.
        /// </summary>
        /// <param name="e">Details über Startanforderung und -prozess.</param>
        protected override void OnLaunched(LaunchActivatedEventArgs e)
        {
            Frame rootFrame = Window.Current.Content as Frame;

            // App-Initialisierung nicht wiederholen, wenn das Fenster bereits Inhalte enthält.
            // Nur sicherstellen, dass das Fenster aktiv ist.
            if (rootFrame == null)
            {
                // Frame erstellen, der als Navigationskontext fungiert und zum Parameter der ersten Seite navigieren
                rootFrame = new Frame();

                rootFrame.NavigationFailed += OnNavigationFailed;

                if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
                {
                    //TODO: Zustand von zuvor angehaltener Anwendung laden
                }

                // Den Frame im aktuellen Fenster platzieren
                Window.Current.Content = rootFrame;
            }

            if (e.PrelaunchActivated == false)
            {
                if (rootFrame.Content == null)
                {
                    // Wenn der Navigationsstapel nicht wiederhergestellt wird, zur ersten Seite navigieren
                    // und die neue Seite konfigurieren, indem die erforderlichen Informationen als Navigationsparameter
                    // übergeben werden
                    rootFrame.Navigate(typeof(MainPage), e.Arguments);
                }
                // Sicherstellen, dass das aktuelle Fenster aktiv ist
                ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.FullScreen;
                Windows.UI.ViewManagement.ApplicationView.GetForCurrentView().TryEnterFullScreenMode();
                Window.Current.Activate();
            }

            EnteredBackground += new EnteredBackgroundEventHandler(delegate(Object o, EnteredBackgroundEventArgs a)
            {
                DataManager.Instance.SaveSettings();
            });

            LeavingBackground += new LeavingBackgroundEventHandler(delegate(Object o, LeavingBackgroundEventArgs a)
            {
                DataManager.Instance.LoadSettings();
            });

            DataManager.Instance.Changed += new DataManager.OnKlassenChangedListener(delegate(Klasse klasse)
            {
                var frame = (Frame)Window.Current.Content;
                var page  = (MainPage)frame.Content;
                page.KlassenChanged(klasse);
            });
        }