我正在使用基本页面模板处理多个页面的WinRT应用程序。每个页面具有1366 * 768分辨率的背景图像,并且当从页面导航到另一页面时,存在不期望且恼人的闪烁效果。有什么技巧可以摆脱它吗?我曾试图看一下这些图片。属性但到目前为止没有运气。这可以实现吗?
非常感谢任何帮助,谢谢。
答案 0 :(得分:3)
我通过在主框架的背景上设置图像来移除它。
在app.cs文件中添加以下代码: -
protected override void OnLaunched(LaunchActivatedEventArgs args) { Frame rootFrame = Window.Current.Content as Frame; ImageBrush brush = new ImageBrush(); BitmapImage image = new BitmapImage(new Uri("...")); brush.ImageSource = image; rootFrame.Background = brush;
这可以防止闪烁。
答案 1 :(得分:1)
罗斯的回答很简单,接近我的想法。我可能会使用两个图像控件,并在它们之间交替设置图片+在新图像加载后运行溶解过渡动画。
我认为WinRT XAML的工作方式是当你导航到一个在可视化树中有图像的新页面时 - 它可能会延迟打开新页面几分之一秒等待图像加载,但是只是很短的时间。我认为这就是发生的事情,因为我看到新的页面打开了我的笔记本电脑上加载的图像,但它似乎超时,因为在Surface上 - 它首先显示没有图像,它们只会在以后弹出。
如果你想给WinRT XAML工具包一个机会 - 它有一些其他机制可以帮助你。与AlternativePage一起使用的AlternativeFrame是Frame / Page的交换,它具有几乎相同的API,但Navigate方法是异步的,它允许您等待下一页加载其图像(使用ShouldWaitForImagesToLoad =“True”设置在打开它之前在框架或页面上)或其他内容,并支持页面转换。它还有一个Preload()方法,允许您在调用Navigate之前预先加载内存中的下一页,因此它可以在用户的操作调用导航调用时显示(假设您没有多少选项可以在何处调用导航到你所在的位置。)
您可以使用的另一个工具是ImageExtensions.FadeInOnLoaded属性,可以让您的图片在加载时平滑淡入,而不是仅仅弹出。