在形状上绘制文本
本文关键字:绘制 文本 | 更新日期: 2023-09-27 18:12:58
我想按照http://msdn.microsoft.com/en-us/library/aa327572%28v=vs.71%29.aspx和http://www.switchonthecode.com/tutorials/csharp-snippet-tutorial-how-to-draw-text-on-an-image中的示例在一些形状上画一个字符串。我使用c#,所以在任何情况下我都需要PaintEventArgs e。然而,当我将它作为参数插入到DrawStringRectangleF(PaintEventArgs e)这样的方法中时,它不会(如预期的那样)直接被识别。我导入System.Windows.Forms.PaintEventArgs和字段"Forms"仍然无法识别?我该怎么办?
有没有其他更简单的方法来分配文本的形状,我可以调整的样式?
对于初学者来说,如果你使用的是WinForms,你可以通过重写OnPaint方法并将控件样式设置为手动绘制来获得图形对象。就像
... .ctor()
{
...
// indicate user will paint
SetStyle(ControlStyles.UserPaint, true);
// rest is optional if you want/need it
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.ResizeRedraw, true);
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
SetStyle(ControlStyles.Opaque, true);
}
protected override void OnPaint(PaintEventArgs p)
{
// depending on how you set the control styles, you might need
// this to draw the background of your control wit a call to the methods base
base.OnPaint(p);
Graphics g = p.Graphics;
// ... Do your painting here with g ....
}
但是,由于您还将此标记为WPF问题,因此请注意,这在WPF中不起作用。我在这方面不是很精通,但我已经使用过重写元素。方法,并取得了良好的效果。它会给你一个DrawingContext对象而不是一个PaintEventArgs对象。但它们的工作方式大致相同。而且你不需要设置控件样式
由于您使用WPF,只需将您的形状和TextBlock
放置在允许控件重叠的容器内,例如Grid
或Canvas
。
<Grid>
<Rectangle ... />
<TextBlock Text="Test"
HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>