在Windows 8应用程序中扩展启动后无法导航到页面

我已经按照Microsoft提供的指南创建了扩展的启动画面。 屏幕显示关闭,数据加载,但随后应用程序无法导航到登录页面。 这怎么可能?

ExtendedSplash.xaml.cs

public sealed partial class ExtendedSplash { public ExtendedSplash(SplashScreen splash) { this.InitializeComponent(); // Position the extended splash screen image in the same location as the splash screen image. this.extendedSplashImage.SetValue(Canvas.LeftProperty, splash.ImageLocation.X); this.extendedSplashImage.SetValue(Canvas.TopProperty, splash.ImageLocation.Y); this.extendedSplashImage.Height = splash.ImageLocation.Height; this.extendedSplashImage.Width = splash.ImageLocation.Width; // Position the extended splash screen's progress ring. this.ProgressRing.SetValue(Canvas.TopProperty, splash.ImageLocation.Y + splash.ImageLocation.Height + 32); this.ProgressRing.SetValue(Canvas.LeftProperty, splash.ImageLocation.X + (splash.ImageLocation.Width / 2) - 15); } public void onSplashScreenDismissed(SplashScreen sender, object args) { } } 

来自App.xaml.cs

  protected override async void OnLaunched(LaunchActivatedEventArgs args) { _newsDataSource = (NewsDataSource)App.Current.Resources["newsDataSource"]; _movieDataSource = (MovieDataSource)App.Current.Resources["moviesDataSource"]; await PerformDataFetch(); // extended splash screen loading ExtendedSplash eSplash = new ExtendedSplash(args.SplashScreen); args.SplashScreen.Dismissed += new TypedEventHandler(eSplash.onSplashScreenDismissed); // Place the frame in the current Window Window.Current.Content = eSplash; Window.Current.Activate(); } internal async Task PerformDataFetch() { // load news if (_newsDataSource != null) { if (!_newsDataSource.News.Any()) { await _newsDataSource.GetNewsAsync(); } } // load movies if (_movieDataSource != null) { if (!_movieDataSource.Movies.Any()) { await _movieDataSource.GetMoviesAsync(); } } RemoveExtendedSplash(); } internal void RemoveExtendedSplash() { Window.Current.Content = new MainPage(); Window.Current.Activate(); } 

如果在最后一个方法上放置一个断点,它会触发,但是没有转换到该页面。 我喜欢ProgressRing的动画,但应用程序也应该做其他事情:)

ExtendedSplash必须是Page。 所以ExtendedSplash.xaml.cs:

 public sealed partial class ExtendedSplash : Page { public ExtendedSplash() { this.InitializeComponent(); } protected override void OnNavigatedTo(NavigationEventArgs e) { SplashScreen splash = (SplashScreen) e.Parameter; // Position the extended splash screen image in the same location as the splash screen image. this.extendedSplashImage.SetValue(Canvas.LeftProperty, splash.ImageLocation.X); this.extendedSplashImage.SetValue(Canvas.TopProperty, splash.ImageLocation.Y); this.extendedSplashImage.Height = splash.ImageLocation.Height; this.extendedSplashImage.Width = splash.ImageLocation.Width; // Position the extended splash screen's progress ring. this.ProgressRing.SetValue(Canvas.TopProperty, splash.ImageLocation.Y + splash.ImageLocation.Height + 32); this.ProgressRing.SetValue(Canvas.LeftProperty, splash.ImageLocation.X + (splash.ImageLocation.Width / 2) - 15); } } 

并且所有数据获取操作都应该在App.xaml.cs中执行。 完成后,只需将帧导航到登录页面即可。

 sealed partial class App : Application { private Frame _rootFrame; protected override async void OnLaunched(LaunchActivatedEventArgs args) { if(_rootFrame == null) _rootFrame = new Frame(); // Place the frame in the current Window _rootFrame.Navigate(typeof (ExtendedSplash), args.SplashScreen); Window.Current.Content = _rootFrame; Window.Current.Activate(); await PerformDataFetch(); } internal async Task PerformDataFetch() { // data loading here RemoveExtendedSplash(); } internal void RemoveExtendedSplash() { if (_rootFrame != null) _rootFrame.Navigate(typeof (MainPage)); } }