我在我的代码中动态地将标签添加到面板。
我想做的是能够勾勒出字体的轮廓,以便它可以从面板的背景颜色中脱颖而出。
问题是我不知道如何使用 Winforms 在 C# 中为我的字体创建轮廓甚至阴影效果。
任何人都知道我应该看什么或可以指出我正确的方向吗?如果你不明白我的意思,下图就是我想要的:(外衬)
我认为您必须自定义绘制自己的控件。这是一个示例Label
。请注意,这只是一个演示,您应该尝试在 winforms 中了解更多关于自定义绘画的信息:
public class CustomLabel : Label
{
public CustomLabel()
{
OutlineForeColor = Color.Green;
OutlineWidth = 2;
}
public Color OutlineForeColor { get; set; }
public float OutlineWidth { get; set; }
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.FillRectangle(new SolidBrush(BackColor), ClientRectangle);
using (GraphicsPath gp = new GraphicsPath())
using (Pen outline = new Pen(OutlineForeColor, OutlineWidth)
{ LineJoin = LineJoin.Round})
using(StringFormat sf = new StringFormat())
using(Brush foreBrush = new SolidBrush(ForeColor))
{
gp.AddString(Text, Font.FontFamily, (int)Font.Style,
Font.Size, ClientRectangle, sf);
e.Graphics.ScaleTransform(1.3f, 1.35f);
e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
e.Graphics.DrawPath(outline, gp);
e.Graphics.FillPath(foreBrush, gp);
}
}
}
您可以通过属性更改轮廓颜色OutlineForeColor
,您可以通过属性更改轮廓宽度OutlineWidth
。当您在设计器中更改这些属性时,不会立即应用效果(因为没有任何代码可以做到这一点,我想保持简短和简单),仅当表单获得焦点时才会应用效果。
您可以添加更多的是映射TextAlign
到(在代码Alignment
中StringFormat
命名sf
),您还可以覆盖一些事件引发方法以添加对外观的更多控制(例如更改ForeColor
鼠标悬停在标签上的时间。 ..)。你甚至可以创建一些阴影效果和发光效果(它需要更多的代码)。