我有一个应用程序,其中有很多引用,加载时间对我来说是不可接受的。我已经删除了启动画面图像,并通过一个单独的项目创建了一个动画加载屏幕,该项目没有引用主应用程序,然后导航到应用程序其余部分的第一页。它确实现在开始很快,但它仍然有点缺乏。
我想在加载屏幕消失之前再做一个动画。我能想到的唯一方法是实际将导航所需的程序集预加载到下一页,做一个动画,然后导航。
我试过了
OnNavigatedFrom
但是动画没有时间运行,因为从那一点起页面将很快被新页面替换。 OnNavigatingFrom
没有任何帮助,因为我打电话给NavigationService.Navigate();
感谢您的任何想法!
答案 0 :(得分:0)
如果要强制加载装配体,只需引用此装配体中的类型。
例如,类似Console.WriteLine(typeof(YourAssembly.SomeType));
的内容会强制加载YourAssembly
。
现在您的问题,也许您可以使用usercontrols?将主页的内容放在用户控件中。显示加载页面,在后台创建用户控件,让动画播放,然后在动画播放时用usercontrol替换页面内容。
答案 1 :(得分:0)
事实证明,只需创建要导航到的页面的新实例即可预加载。不幸的是,这必须在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();
}
}