【问题标题】:How can I preload a page I want to navigate to?如何预加载要导航到的页面?
【发布时间】:2014-07-08 07:09:28
【问题描述】:

我正在为 WP8 构建应用程序,加载 MainPage.xaml 需要几秒钟。 我想添加一个动画启动画面,所以这是我所做的:

  • 我新建了一个,并将其设置为默认导航页面
  • 我在页面中放置了 StoryBoard 动画,周围没有其他内容,因此加载速度很快

现在,如果我尝试从该页面导航到主页,则需要几秒钟,因为它必须像往常一样加载所有内容。

stackoverflow 上的一位用户编写了一个代码示例来执行类似的操作,他说如果您在导航到该页面之前创建一个新的页面实例,它将导致页面实际预加载,从而使导航非常快。 这是他的代码:

private void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
{
    var sb = new Storyboard();
    // create your animation here

    sb.Completed += (sender, args) => PreLoad();
    sb.Begin();
}

private void PreLoad()
{
    // this is the part that actually takes time and causes things to get loaded
    // you may need it in a try/catch block depending on what is in your constructor
    var page = new PageToNavigateTo();

    // now create an animation at the end of which we navigate away
    var sbOut = new Storyboard();
    // create your animation here

    sbOut.Completed += (sender, args) => NavigateToNextScreen();
    sbOut.Begin();
}

private void NavigateToNextScreen()
{
    // navigate here
}

protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
    base.OnNavigatedFrom(e);

    // remove the loading screen from the backstack so the user doesn't see it again when hitting the back button
    NavigationService.RemoveBackEntry();
}

我只是不明白他的意思是什么:

var page = new PageToNavigateTo();

我应该在那里做什么?我的意思是,我必须调用哪种方法来创建要导航到的页面的新实例? 另外,在 NavigateToNextScreen() 方法中,我是否必须使用通常的

NavigationService.Navigate(new Uri("/CreditiInfo.xaml", UriKind.Relative));

还是别的什么? 你能帮我完成这段代码吗? :)

谢谢!

塞尔吉奥

【问题讨论】:

    标签: c# xaml windows-phone-8


    【解决方案1】:

    我建议将“PageToNavigateTo()”作为下一页名称的页面构造函数。因此,在您的情况下,您将拥有:

    var page = new MainPage();
    

    用于导航。这是我所知道的在 Windows Phone 8 应用程序的页面之间导航的唯一方法。

    【讨论】:

    • 好的,这应该是他的意思,但看起来用通常的 NavigationService.Navigate... 导航到新页面不起作用。我的意思是,它可以工作,但它会加载几秒钟。我必须使用哪种方法导航到我已经创建的页面?
    • 请问延迟几秒的原因是什么?您是否必须在显示之前将一些数据加载到页面中?就像我说的那样,这是我知道的在页面之间导航的唯一方法,我会看看,看看我能不能弄清楚。
    • 我不知道,我有一个 6 页的全景应用程序,里面有很多文本框、文本块、仪表和东西。起初它在不到一秒钟的时间内加载,但是当我开始向全景图添加东西时,启动时间变长了,我想这很正常。
    • 说实话,我不会怀疑简单地添加用户控件会大大减慢加载时间。您将多少个控件称为“很多”?我想我找到了您从中获取代码的原始帖子。我相信他想说的是,通过在导航之前简单地调用构造函数,您将预加载。但是,我不确定这是否会在您导航后起作用,您将导航到页面的新实例。该代码还针对 WP7,我相信它使用了与 WP8 不同的导航结构。
    • 好的,这就是它不起作用的原因:(现在我有(在那 6 页全景中):52 个按钮,49 个网格,7 个动画仪表,88 个文本块,63 个矩形,26 个文本框,大约 30 个故事板和其他一些东西。老实说,我不知道应用程序需要几秒钟才能加载这么多控件是否正常......
    猜你喜欢
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    相关资源
    最近更新 更多