WPF版のSystem.Drawing.Graphics

WPFになって、根本的に描画のパラダイムが変わって、Windows FormsであったOnPaintは姿を消してる。当然、System.Drawing.Graphicsもない。

でも、Graphicsみたいなので書きたい!ということあるわけで...そんな時は、System.Windows.Media.DrawingContext。
(OnRenderをオーバーライドする方法もあるけど、なるべくWPFのやり方に従う方向でー)

RenderTargetBitmap rtb = new RenderTargetBitmap((int)size.Width, (int)size.Height, 96, 96, PixelFormats.Pbgra32);
DrawingVisual dv = new DrawingVisual();
System.Windows.Media.DrawingContext dc = dv.RenderOpen();

dc.DrawRectangle(Brushes.LightBlue, (Pen)null, new Rect(0, 0, 100, 200));

dc.Close();
rtb.Render(dv);

BitmapSource bs = BitmapFrame.Create(rtb);

あと、独自のアニメーションを動かしたりするには↓のようにDispatcherのInvoke/BeginInvoke使ってUIスレッドを利用するといいかも。

this.Dispatcher.BeginInvoke(DispatcherPriority.Render, new System.Windows.Threading.DispatcherOperationCallback(delegate
{
}

参考:

Windows Presentation Foundation のグラフィックス レンダリングの概要
http://msdn2.microsoft.com/ja-jp/library/ms748373(VS.80).aspx

WPF アーキテクチャ
http://msdn2.microsoft.com/ja-jp/library/ms750441(VS.80).aspx

スレッドモデル
http://msdn2.microsoft.com/ja-jp/library/ms741870(VS.80).aspx