使用C#中的轮廓颜色设置字体

我正在代码中动态地将标签添加到面板中。

我想要做的是能够勾画出字体,使其能够从面板的背景颜色中脱颖而出。

问题是我不知道如何使用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属性更改轮廓颜色,您可以通过OutlineForeColor属性更改轮廓宽度。 当您在设计器中更改这些属性时,效果不会立即应用(因为没有任何代码可以执行此操作,我希望保持简洁和简单),仅在窗体聚焦时才应用效果。

你可以添加更多的是将TextAlign映射到StringFormatAlignment (在代码中命名为sf ),你还可以覆盖一些事件提升方法来添加对外观的更多控制(例如在鼠标时更改ForeColor在标签上……)。 你甚至可以创建一些阴影效果和发光效果(它需要更多的代码)。

在此处输入图像描述