我编写了以下(非常简单的)控件以在应用程序中使用(为简洁起见,删除了注释):
public partial class HorizontalRule : Control
{
public HorizontalRule()
{
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
var g = e.Graphics;
var rect = new Rectangle(
this.ClientRectangle.Left,
this.ClientRectangle.Height / 2 + 1,
this.ClientRectangle.Width,
1);
ControlPaint.DrawBorder3D(g, rect, Border3DStyle.Etched);
return;
}
}
免责声明:我是绘制自己的控件的新手。
我选择根据Vista UX 指南中的建议以这种方式画线,该指南建议使用高度为 1 的蚀刻矩形作为分隔符。
当静态时,这看起来不错,但我注意到如果我将此控件放在窗口中并调整它的大小(例如通过锚点),我会得到重绘工件。我在整个客户矩形的宽度上重新绘制了我的边框,但这就像它实际上并没有被绘制一样。在 HorizontalRule 的构造函数中或以嵌入的形式启用 DoubleBuffered 似乎也没有什么区别。
我究竟做错了什么?
更新:
根据建议,我尝试最后调用 base.OnPaint 而不是第一个。我不知道那会改变什么,而且它似乎也没有改变任何东西。
不绘制背景没有任何用处。我仍然得到伪影,但我也没有得到背景颜色,所以我看到了水平线下方的任何图像。