2012-09-23 66 views
2

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

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<SplashScreen, object>(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的动画,但应用程序也应该做其他的事情:)

+2

您可以尝试将Window.Current.Content初始设置为一个Frame,然后将它初始导航到ExtendedSplashScreen,然后再导入到MainPage? – Krishna

+0

是的,如果我将ExtendedSplash视为Page,它的工作原理:)谢谢! –

回答

3

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)); 
    } 
} 
相关问题