1

参照がたくさんあるアプリがあり、読み込み時間が受け入れられませんでした。スプラッシュ画面の画像を削除し、メインアプリケーションを参照せずに別のプロジェクトを作成して、アニメーションのロード画面を作成しました。このプロジェクトは、アプリの残りの部分の最初のページに移動します。今はすぐに起動しますが、まだ少し不足しています。

ロード画面が消える直前に別のアニメーションをやりたいです。これを行うために私が考えることができる唯一の方法は、次のページへのナビゲーションに必要なアセンブリを実際にプリロードし、アニメーションを実行してからナビゲートすることです。

私が試してみました

  • OnNavigatedFromただし、その時点からページが新しいページにすぐに置き換えられるため、アニメーションを実行する時間がありません。
  • OnNavigatingFrom私が電話するとすぐに呼び出されるので、どちらも助けにはなりませんNavigationService.Navigate();
  • ウェブとスタックオーバーフローの検索:)
  • また、次のページにロード画面の複製を表示して最後のアニメーションを実行することで少し偽造することも検討しましたが、ロード画面のアニメーションの現在の状態と一致させることができず、維持するのが困難です

アイデアをありがとう!

4

2 に答える 2

0

If you want to force the loading of an assembly, just reference a type from this assembly.

For instance, something like Console.WriteLine(typeof(YourAssembly.SomeType)); will force the loading of YourAssembly.

Now for your problem, maybe you can use usercontrols? Put the content of your main page in a user control. Display the loading page, create the usercontrol in the background, let the animation play, then when the animation is done playing replace the page's content with the usercontrol.

于 2012-04-25T13:21:04.277 に答える
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();
    }


}
于 2012-04-28T22:42:26.027 に答える