我有一个应用程序中,我有很多的引用和加载时间是不能接受我。 我已删除初始屏幕图像和由具有与没有参考在主应用程序,然后导航到该应用程序的其余部分的第一页的单独项目创建动画加载屏幕。 它现在快速启动,但它是一个有点欠缺依然。
我想这样做的另一个动画右侧的加载屏幕消失之前。 我能想到的要做到这一点的唯一方法是实际预加载所需导航到下一个页面的组件,做一个动画,然后导航。
我努力了
-
OnNavigatedFrom
但动画没有足够的时间来运行,因为页面会被新的页面很快从该点所取代。 -
OnNavigatingFrom
是没有任何帮助,因为它是当我打电话叫NavigationService.Navigate();
- 搜索网络和堆栈溢出:)
- 我还审议了具有下一个页面显示加载屏幕的副本和做最后的动画有伪造有点,但不能匹配负载屏幕动画的当前状态,是难以维持
感谢您的任何想法!
如果要强制装配的加载,只是从此程序引用类型。
举例来说,像Console.WriteLine(typeof(YourAssembly.SomeType));
将强制加载YourAssembly
。
现在,你的问题,也许你可以使用用户控件? 把你的主页的内容在用户的控制。 显示加载页面,在后台创建的用户控件,让动画播放,那么当动画播放完毕替换页面与用户控件的内容。
事实证明,你可以只是创造你要导航到该页面的新实例预加载。 不幸的是必须被UI线程这可能会导致动画放缓,在我的经验,至少上完成。
下面是如何做一个动画的样本,然后预加载,然后导航之前做的另一个动画。 :
public partial class LoadScreen : PhoneApplicationPage
{
public LoadScreen()
{
InitializeComponent();
this.Loaded += OnLoaded;
}
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();
}
}