2012-09-29 120 views
1

我做了它继承的TextBox控件,而我试图给笔记本格:绘制画笔

Notebook page

我已经将指定代码在哪里画线,包括所有的网格功能,但我不知道该怎么绘制它。 我搜索了很多,并寻找一个画笔,让我有一个DrawingContext相同的接口(所以我可以调用drawingContext.DrawLine()等),或熟悉的东西,但我找不到任何!

那么我怎样才能获得我的网格背景?

P.S我不能创建一个静态的bmp文件并加载它,因为网格颜色和间距将肯定改变

回答

1

你可以尝试使用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; 
+0

完美!谢谢。 – MasterMastic

+0

@Ken不客气,很高兴有人帮助 –

0

可以拦截Paint事件的控制。您会得到一个PaintEventArgs参数,其中包括ClipRectangleGraphics对象。

结帐Control.Paint Event

一旦你有你的Graphics对象,你可以直接调用DrawLineFillRectangle

+0

谢谢,但我的程序使用WPF,但WinForms。 – MasterMastic

+0

这是我的理解,你仍然在你的控件中得到一个绘画事件。不过,我可能是错的。 –

0

你正在寻找一个自定义绘制的控件。您需要重写控件类的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

相关问题