フレーム単位でイベントを取得

以前に「FrameRate単位でイベントを取得」ってので、Storyboardでいけるって書いたんですが、Silverlight 2 RC0 からは専用のオブジェクトができてました。CompositionTargetってやつです。

このCompositionTargetのRenderingイベントでフレームごとのイベントが取得できます。以下のような感じ。

public Page()
{
  InitializeComponent();
  CompositionTarget.Rendering += CompositionTarget_Rendering;
}

private void CompositionTarget_Rendering(object sender, EventArgs e)
{
  target.SetValue(Canvas.LeftProperty, (double)target.GetValue(Canvas.LeftProperty) + 0.5);
  target.SetValue(Canvas.TopProperty, (double)target.GetValue(Canvas.TopProperty) + 0.5);
}

これで、空のStoryboardでグリグリするのともおさらばですね。