2

XAML に ProgressRing を含むグリッドがあり、アプリが長時間実行されるタスクを実行しているときにフェードインします。

        <Grid Height="100" Width="100"  >
            <Grid Background="#55000000" />
            <ProgressRing x:Name="mapProgressRing"  Width="50" Height="50" Foreground="White" />    
        </Grid>
        </Border>

ただし、アニメーションを 1 秒遅らせたいと考えています。タスクが 1 秒未満で終了した場合、グリッドは表示されません。したがって、非常に短いタスクが実行されるときに、グリッドが絶えず点滅するのを回避できます。

ただし、上記の XAML で BeginTime を設定しているにもかかわらず、コードでこれを試しても、グリッドは常にすぐにフェードアウトし始めます。これが私のコードです:

    void dataSou_WillStartFetchingSomething(object sender, EventArgs e)
    {
        // Don't bother fading in spinner unless it takes more than a second
        showSpinner(TimeSpan.FromSeconds(1));
    }
    void Instance_WillEndFetchingSomething(object sender, EventArgs e)
    {
        hideSpinner();
    }

    #region Spinner
    void showSpinner(TimeSpan? delayStartTime)
    {
        // Stop animation in case it's already running
        mapRingFadeOutStoryBoard.Stop();
        // Fade in, delaying the start by the specified time
        mapRingFadeInStoryBoard.BeginTime = delayStartTime;
        mapRingFadeInStoryBoard.Begin();
    }
    void hideSpinner()
    {
        // Stop the 'fade in' animation in case it's still running
        mapRingFadeInStoryBoard.Stop();

        // Fade out
        mapRingFadeOutStoryBoard.Begin();
    }
    #endregion

私は何を間違っていますか?

4

1 に答える 1

0

何が問題なのかわかりませんが、代わりに async/await を使用できます。メソッドを非同期としてマークし、「await Task.Delay(1000)」を実行して、アニメーションを開始する前に 1 秒間待機します。

于 2012-08-14T15:52:28.133 に答える