I've created extended splash screen following guide offered by Microsoft. The screen shows off, data loads, but then the app doesn't navigate to landing page. How is this possible?
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)
{
}
}
from 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();
}
If a put a breakpoint on last method, it fires, but there is no transition to the page. I like the animation of ProgressRing, but the app should do something else too :)
ExtendedSplash must be a Page. So ExtendedSplash.xaml.cs:
And all data fetch operations should be executed in App.xaml.cs. When finished, it's enough just to navigate frame to landing page.