我做了一个继承TextBox的控件,我正在尝试给一个笔记本网格:
我已经有代码可以指定在何处绘制包括所有网格特征的线条,但我不确定将其绘制到什么位置。我用谷歌搜索了很多,并搜索了一个画笔,它可以让我拥有与 DrawingContext 相同的界面(所以我可以调用 drawingContext.DrawLine() 等),或者一些熟悉的东西,但我找不到任何东西!
那么我怎样才能获得我的网格背景呢?
PS 我无法创建静态 bmp 文件并加载它,因为网格颜色和间距肯定会改变
您可以尝试使用DrawingVisual
让您的DrawingContext
然后创建一个VisualBrush
分配给您的Background
. 像这样的东西。
DrawingVisual dv = new DrawingVisual();
DrawingContext dc = dv.RenderOpen();
dc.DrawLine( new Pen(Brushes.Red,5),new Point(0,0),new Point(50,50));
dc.Close();
VisualBrush vb = new VisualBrush(dv);
textBox1.Background = vb;
您可以拦截Paint
事件以供您控制。你得到一个PaintEventArgs
参数,其中包括一个ClipRectangle
和一个Graphics
对象。
一旦你有了你的Graphics
对象,你就可以直接调用DrawLine
它FillRectangle
。
您正在寻找自定义绘制的控件。您需要覆盖控件类的 OnPaint 方法并在该方法中绘制背景。这是一个关于如何做到这一点的例子:http: //msdn.microsoft.com/en-us/library/b818z6z6 (v=vs.90).aspx
要绘制背景,请在第一次调用基本 OnPaint 方法后获取绘图上下文并绘制背景:
protected override void OnPaint(PaintEventArgs pe)
{
// Call the OnPaint method of the base class.
base.OnPaint(pe);
// Declare and instantiate a new pen.
System.Drawing.Pen myPen = new System.Drawing.Pen(Color.Aqua);
// Draw an aqua rectangle in the rectangle represented by the control.
pe.Graphics.DrawRectangle(myPen, new Rectangle(this.Location, this.Size));
}
编辑: 由于您使用的是 WPF,因此您可以在此处查看有关自定义设计的完整示例:WPF .NET 3.5 Drawing Customized Controls and Custom UI Elements