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