MediaElement を使ってアニメーションを繰り返す
WPF に用意される MediaElement / MediaPlayer コントロールは、 動画、Gifアニメーション、音声ファイルなどを再生させることができます。 対応するフォーマットは WindowsMediaPlayer で再生できる範囲のものくらいです。
ところが MediaElement はいくつか癖のある挙動をします。そのうちの1つが繰り返し再生です。 そもそも繰り返し再生のためのメソッドは MediaElement に用意されていないため任意に実装する必要があります。 また GIFアニメーションを繰り返し再生する場合には、TimeSpan を 0 に設定してはいけません。
MediaElement によって繰り返し再生する
次のコードのように実装することで、MediaElement に設定したメディアを繰り返し再生することができます。
ここで注意するべき点が1つあります。MediaEnded
イベントを利用して繰り返し再生を実現していますが、
GIF アニメーションを繰り返し再生させたいときは、media.Position
プロパティに 0 を設定してはいけません。
0 に設定すると繰り返し再生されません(動画・音声は繰り返される)。
MediaElement media = new MediaElement();
media.LoadedBehavior = MediaState.Manual;
media.MediaEnded += (sender, e) =>
{
media.Position = TimeSpan.FromMilliseconds(1);
media.Play();
};
GIF アニメーションのときこのように設定するのは仕様のようです。 動画や音声の繰り返しに関しても 1 ミリ秒の遅延は気にならない場合がほとんどですので、 あらゆるフォーマットに対応する必要があるときは、終了時には 1 ミリ秒から再開するようにするのが良いと思います。