//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);
/// <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); }); }