简体   繁体   中英

Trying To navigate From Extended splash screen to another screen in uwp

I'm trying to navigate from Extended.xaml screen to another screen Main.xaml. But issue is that the page is stuck there not navigating to another page. How to achieve that? Any help would be appreciated.

Xaml code:

<Grid x:Name="lcol">
    <Grid.Background>
        <ImageBrush  Stretch="Fill"
                     ImageSource="ms-appx:///Assets/Home/home_android.jpg" />
    </Grid.Background>
    <RelativePanel Grid.Row="0">
    <Image x:Name="extendedSplashImage" Source="/Assets/Home/home_android.jpg"                    
           Stretch="Uniform" Height="385" Width="690"
           RelativePanel.AlignHorizontalCenterWithPanel="True"
           RelativePanel.AlignLeftWithPanel="True"
           RelativePanel.AlignRightWithPanel="True"/>
    </RelativePanel>
</Grid>

Cs code:

public sealed partial class ExtendedSplash : Page
{
    internal Rect splashImageRect; // Rect to store splash screen image coordinates.
    private SplashScreen splash; // Variable to hold the splash screen object.
    internal bool dismissed = false; // Variable to track splash screen dismissal status.
    internal Frame rootFrame;

    public ExtendedSplash(SplashScreen splashscreen, bool loadState)
    {
        InitializeComponent()
        try
        {
            var bounds = ApplicationView.GetForCurrentView().VisibleBounds;
        }
        catch (Exception ex)
        {
            Log.print(ex.StackTrace);
        }
        // Listen for window resize events to reposition the extended splash screen image accordingly.
        // This is important to ensure that the extended splash screen is formatted properly in response to snapping, unsnapping, rotation, etc...
        // Window.Current.SizeChanged += new WindowSizeChangedEventHandler(ExtendedSplash_OnResize);

        splash = splashscreen;

        if (splash != null)
        {
            // Register an event handler to be executed when the splash screen has been dismissed.
            splash.Dismissed += new TypedEventHandler<SplashScreen, Object>(DismissedEventHandler);
            // Create a Frame to act as the navigation context
            rootFrame = new Frame();
            DismissExtendedSplash();
        }
    }
    void PositionImage()
    {
        extendedSplashImage.SetValue(Canvas.LeftProperty, splashImageRect.X);
        extendedSplashImage.SetValue(Canvas.TopProperty, splashImageRect.Y);
        extendedSplashImage.Height = splashImageRect.Height;
        extendedSplashImage.Width = splashImageRect.Width;

    }
    void ExtendedSplash_OnResize(Object sender, WindowSizeChangedEventArgs e)
    {
        // Safely update the extended splash screen image coordinates. This function will be fired in response to snapping, unsnapping, rotation, etc...
        if (splash != null)
        {
            // Update the coordinates of the splash screen image.
            splashImageRect = splash.ImageLocation;
            PositionImage();
        }
    }
    // Include code to be executed when the system has transitioned from the splash screen to the extended splash screen (application's first view).
    void DismissedEventHandler(SplashScreen sender, object e)
    {
        dismissed = true;
        // Complete app setup operations here...
    }
    private void DismissExtendedSplash()
    {
        rootFrame.Navigate(typeof(MainPage));
        // Place the frame in the current Window
        Window.Current.Content = rootFrame;
    }
}

You can show more detail of App.xaml.cs. I suppose your code is written as the official simple like this

protected override void OnLaunched(LaunchActivatedEventArgs e)
{
    if (e.PreviousExecutionState != ApplicationExecutionState.Running)
    {
        bool loadState = (e.PreviousExecutionState == ApplicationExecutionState.Terminated);
        ExtendedSplash extendedSplash = new ExtendedSplash(e.SplashScreen, loadState);
        Window.Current.Content = extendedSplash;
    }

    Window.Current.Activate();
}

Your ExtendedSplash code :

public ExtendedSplash(SplashScreen splashscreen, bool loadState)
{
    InitializeComponent()
  try
    {
        var bounds = ApplicationView.GetForCurrentView().VisibleBounds;
    }
    catch (Exception ex)
    {
        Log.print(ex.StackTrace);
    }

    splash = splashscreen;

    if (splash != null)
    {
        // Register an event handler to be executed when the splash screen has been dismissed.
        splash.Dismissed += new TypedEventHandler<SplashScreen, Object>(DismissedEventHandler);
        // Create a Frame to act as the navigation context
        rootFrame = new Frame();
        DismissExtendedSplash();
    }
}

You executed method DismissExtendedSplash() before finished initialization extendedSplash. So Window.Current.Conten is MainPage, and then you excuted Window.Current.Content = extendedSplash ,The MainPage is replaced with extendedSplash .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM