1

我做了一个继承TextBox的控件,我正在尝试给一个笔记本网格:

笔记本页面

我已经有代码可以指定在何处绘制包括所有网格特征的线条,但我不确定将其绘制到什么位置。我用谷歌搜索了很多,并搜索了一个画笔,它可以让我拥有与 DrawingContext 相同的界面(所以我可以调用 drawingContext.DrawLine() 等),或者一些熟悉的东西,但我找不到任何东西!

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

PS 我无法创建静态 bmp 文件并加载它,因为网格颜色和间距肯定会改变

4

3 回答 3

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;
于 2012-09-29T15:09:55.903 回答
0

您可以拦截Paint事件以供您控制。你得到一个PaintEventArgs参数,其中包括一个ClipRectangle和一个Graphics对象。

查看Control.Paint 事件

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

于 2012-09-29T14:29:26.667 回答
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

于 2012-09-29T14:30:39.950 回答