有一个 Windows 窗体应用程序,我正在尝试将其转换为 wpf ,但是当我使用主窗口覆盖 onPaintBackground 时
protected override void OnPaintBackground(PaintEventArgs pevent)
有错误
找不到合适的方法来覆盖
那么 wpf 中 onPaintBackground 的替代方法是什么?
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);
}
你真的不想用 WPF 来做这件事。重写 OnRender 有充分的理由,但作为绘制背景的替代品并不是其中之一。WPF 是一种保留模式的图形系统,而 WinForms 是一种即时模式的系统。您需要在此处阅读差异:
http://msdn.microsoft.com/en-us/library/ff684178%28v=vs.85%29.aspx
而对于 WinForms,如果您想为控件设置动画,您首先需要清除之前渲染它的区域以避免伪影,而对于 WPF,您只需为您想要的属性设置动画并让系统处理使像素无效。