2

wpfに変換しようとしているWindowsフォームアプリケーションがありますが、メインウィンドウでonPaintBackgroundをオーバーライドする場合

protected override void OnPaintBackground(PaintEventArgs pevent)

エラーがあります

オーバーライドする適切なメソッドが見つかりません

では、wpfのonPaintBackgroundの代替手段は何ですか?

4

2 に答える 2

2

一般に、WPFで「ペイント」するべきではありません。オブジェクト(ペン、ブラシ、シェイプ)を継続的に再作成するのは非常に遅い場合があるためです。

次のページの例のように、 OnRenderメソッドをオーバーライドできます。

protected override void OnRender(DrawingContext dc)
{
    SolidColorBrush mySolidColorBrush  = new SolidColorBrush();
    mySolidColorBrush.Color = Colors.LimeGreen;
    Pen myPen = new Pen(Brushes.Blue, 10);
    Rect myRect = new Rect(0, 0, 500, 500);
    dc.DrawRectangle(mySolidColorBrush, myPen, myRect);
}
于 2012-05-21T14:46:35.523 に答える
2

あなたは本当にWPFでこれをしたくありません。OnRenderをオーバーライドするのには十分な理由がありますが、背景をペイントする代わりに、その1つではありません。WPFは保持モードのグラフィックシステムであり、WinFormsは即時モードのグラフィックシステムです。ここで違いを確認する必要があります。

http://msdn.microsoft.com/en-us/library/ff684178%28v=vs.85%29.aspx

WinFormsでは、コントロールをアニメーション化する場合は、アーティファクトを回避するために最初にレンダリングされた領域をクリアする必要がありますが、WPFでは、必要なプロパティをアニメーション化して、システムにピクセルの無効化を処理させます。

于 2012-05-21T17:23:39.883 に答える