尝试在uwp

时间:2016-12-14 11:03:50

标签: c# xaml uwp splash-screen

我尝试从Extended.xaml屏幕导航到另一个屏幕Main.xaml。 但问题是页面卡在那里而不是导航到另一个页面。怎么实现呢?任何帮助将不胜感激。

Xaml代码:

<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代码:

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

1 个答案:

答案 0 :(得分:0)

您可以显示App.xaml.cs的更多详细信息。我想你的代码是像这样的官方简单写的

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

您的ExtendedSplash代码:

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

在完成初始化extendedSplash之前执行了方法DismissExtendedSplash()。因此Window.Current.Conten是MainPage,然后您执行了Window.Current.Content = extendedSplashMainPage被替换为extendedSplash