2

有一个 Windows 窗体应用程序,我正在尝试将其转换为 wpf ,但是当我使用主窗口覆盖 onPaintBackground 时

protected override void OnPaintBackground(PaintEventArgs pevent)

有错误

找不到合适的方法来覆盖

那么 wpf 中 onPaintBackground 的替代方法是什么?

4

2 回答 2

2

In general you shouldn't 'paint' in WPF. Because it can be very slow to continuously recreate the objects (Pens, brushes, shapes).

You can override the OnRender method, example from this page:

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 有充分的理由,但作为绘制背景的替代品并不是其中之一。WPF 是一种保留模式的图形系统,而 WinForms 是一种即时模式的系统。您需要在此处阅读差异:

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

而对于 WinForms,如果您想为控件设置动画,您首先需要清除之前渲染它的区域以避免伪影,而对于 WPF,您只需为您想要的属性设置动画并让系统处理使像素无效。

于 2012-05-21T17:23:39.883 回答