Unable to navigate to page after extended splash in Windows 8 application

隐身守侯 提交于 2019-12-07 18:50:24

问题


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 :)


回答1:


ExtendedSplash must be a Page. So 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);
    }
}

And all data fetch operations should be executed in App.xaml.cs. When finished, it's enough just to navigate frame to landing page.

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


来源:https://stackoverflow.com/questions/12556184/unable-to-navigate-to-page-after-extended-splash-in-windows-8-application

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!