2

Web ページで Silverlight アプリケーションをホストする場合、splashscreensourceパラメーターを使用して、実際の xap ファイルのダウンロード中に表示されるシンプルな Silverlight 1.0 (xaml+javascript) コントロールを指定できます。このコントロールは、ダウンロードの進行状況の通知を を通じて受け取ることができますonSourceDownloadProgressChanged。xap ファイルがキャッシュにある場合、スプラッシュ画面は表示されません (ダウンロードに 1 秒しかかからない場合、スプラッシュ画面は 1 秒間だけ表示されます)。

これは一般的にベスト プラクティスではないことはわかっていますが、スプラッシュ スクリーンの最小表示時間を指定する方法を探しています。キャッシュされた xap またはダウンロードが高速であっても、スプラッシュ スクリーンは少なくとも表示されたままになります。たとえば、5 秒とします (たとえば、必要な法的免責事項、コーポレート アイデンティティ マーク、またはその他のバグを表示する場合)。

  • スプラッシュ画面でのみ(メインの xap ではなく)それを実行したいのは、クリーンで中断されないようにし(サウンド バグなど)、ユーザーがページを開くとすぐに表示されるようにしたいからです。ダウンロード後 (1 秒から 20 秒以上かかる場合があります)。

  • プリロードでこれを達成するのは避けたいと思います。スプラッシュ スクリーンを完全な Silverlight xap アプリケーション (独自のロード スクリーン付き) に置き換えます。

4

2 に答える 2

2

あまり知られていない事実ですが、XAP の読み込みにかかる時間が経過してもスプラッシュ スクリーンがそのまま残ります。RootVisualアプリケーションが読み込まれるまで置き換えられません。RootVisualしたがって、アプリケーションイベントで を割り当てないとStartup、スプラッシュ スクリーンが永遠に表示されます。

したがって、次のようなコードを使用して、スプラッシュの表示を数秒間遅らせることができます。

private void Application_Startup(object sender, StartupEventArgs e)
{
    var timer = new DispatcherTimer();
    timer.Interval = TimeSpan.FromSeconds(10);
    EventHandler eh = null;

    eh = (s, args) =>
    {
        timer.Stop();
        this.RootVisual = new Test();
        timer.Tick -= eh;
    };

    timer.Tick += eh;

    timer.Start();
}

これは、Reactive フレームワークで簡素化できます。

private void Application_Startup(object sender, StartupEventArgs e)
{
    Observable.Timer(TimeSpan.FromSeconds(10), Scheduler.Dispatcher)
        .Subscribe((l) =>
    {
        this.RootVisual = new Test();
    });
}

ただし、Reactive フレームワークは Xap のサイズに少なくとも 66KB を追加するため、すでに他の目的で Reactive のものを使用している場合にのみ使用してください。

于 2010-04-14T20:19:02.933 に答える
0

開発中にスプラッシュ画面の表示時間を延長することだけに関心がある場合は、Xapファイルからの応答を遅らせるフィドラールールを追加するのは非常に簡単であることに注意してください。

これは、この効果を持つルールの例です。ルールの適用方法の詳細については、PedroForteの投稿を参照してください。非常に簡単です。

if (oSession.uriContains("Midwinter.ReasonableBasis.Client.xap")){
    oSession["ui-color"]="orange"; 
    oSession["ui-bold"]="true";
    //Delay received data by X ms per KB downloaded.
    oSession["response-trickle-delay"] = "10"; 
}
于 2012-10-16T15:57:53.287 に答える