【问题标题】:Transitions not playing on first load in WinRT XAML App在 WinRT XAML 应用程序中首次加载时未播放过渡
【发布时间】:2012-07-14 19:11:06
【问题描述】:

在我的 WinRT XAML 应用程序中,我的 Main.xaml 页面上有一个 EntranceThemeTransition,当您第一次加载应用程序时它不会播放(App.Xaml 执行 Main.xaml 的帧加载)。但是,一旦加载了应用程序并且我离开 Main 然后返回它就会播放。我已经在我构建的其他 WinRT 应用程序中注意到了这一点。

这是一个已知的错误还是允许更快启动的功能?我花时间做了一个很好的介绍过渡,但遗憾的是大多数用户不会看到它。看起来转换在应用程序加载时在后台加载,当用户在页面上加载时,转换就完成了。

目前我正在使用 Thread.Wait 和其他一些技巧 - 但它们并没有使这成为一种“快速流畅”的体验,并且当您从另一个页面导航回它们时,它们会使过渡看起来很笨拙。还有其他人对此有问题吗?强制入口动画在首次加载时播放的最佳做法是什么?提前致谢!

【问题讨论】:

  • 我删除了一些较大的图像资产,它们是过渡的一部分(有些在 120k 范围内),剩下的资产现在动画效果很好。我正在尝试减少 K 大小并制作图像嵌入资源。有人有这方面的经验吗?

标签: xaml windows-8 microsoft-metro windows-runtime winrt-xaml


【解决方案1】:

我相信这主要是因为元素已经在 XAML 树中创建,但是当您从 Web 服务加载数据时,这些元素所绑定的内容是唯一迟到的内容。所以从技术上讲,它是动画的,但你看不到它,因为它们没有内容。你可以通过使用 DeferredContentPresenter 来修复它,它将你的 XAML 保存为等待 VM 指示它已加载数据的 DataTemplate。然后,您可以使用 DataTemplate 上的 LoadContent 函数来创建 XAML 树。现在既然元素被创建了,数据也同时可用了,你应该可以看到入口动画了。

您可以调整此处给出的代码 :Deferred loading of XAML 并添加一个 IsLoaded 属性并将其绑定到当 VM 完成从模型层加载数据时您将从 ViewModel 公开的 IsLoaded 属性。当 DeferredContentProvider 中的 IsLoaded 属性发生变化时,您将调用 LoadContent。

【讨论】:

    【解决方案2】:

    当我在没有调试的情况下进行发布构建并运行应用程序时,我已经看到问题消失了,或者至少变得不那么明显了。

    否则我会显示一个带有进度条的加载屏幕,并在应用程序启动之前预加载图像。

    【讨论】:

      猜你喜欢
      • 2023-02-17
      • 1970-01-01
      • 1970-01-01
      • 2019-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      • 2019-12-12
      相关资源
      最近更新 更多