阴影中的WinForms控件?
-
20-09-2019 - |
题
是有办法阴影添加到控件?
是否有任何控制在那里与这种功能?
解决方案
这个问题已经存在了6年,需要一个答案。我希望任何人谁需要做到这一点可以推断从我的解决方案设置的任何控制一个答案。我有一个面板,并想吸引每一个孩子的控制之下的阴影 - 在这种情况下一个或多个面板(但解决的办法应该把握好与一些小的代码更改其他控制类型)
作为用于控制所述阴影具有控制的容器的表面上绘制我们开始通过添加功能到容器的Paint()事件。
Container.Paint += dropShadow;
阴影效果()看起来像这样:
private void dropShadow(object sender, PaintEventArgs e)
{
Panel panel = (Panel)sender;
Color[] shadow = new Color[3];
shadow[0] = Color.FromArgb(181, 181, 181);
shadow[1] = Color.FromArgb(195, 195, 195);
shadow[2] = Color.FromArgb(211, 211, 211);
Pen pen = new Pen(shadow[0]);
using (pen)
{
foreach (Panel p in panel.Controls.OfType<Panel>())
{
Point pt = p.Location;
pt.Y += p.Height;
for (var sp = 0; sp < 3; sp++)
{
pen.Color = shadow[sp];
e.Graphics.DrawLine(pen, pt.X, pt.Y, pt.X + p.Width - 1, pt.Y);
pt.Y++;
}
}
}
}
显然可以拾取从容器的集合不同的控制类型和可以用一些小的调整而变化的阴影的颜色和深度。
其他提示
您必须覆盖CreateParams
property这样的:
private const int CS_DROPSHADOW = 0x00020000;
protected override CreateParams CreateParams
{
get
{
// add the drop shadow flag for automatically drawing
// a drop shadow around the form
CreateParams cp = base.CreateParams;
cp.ClassStyle |= CS_DROPSHADOW;
return cp;
}
}
有在WPF,如果你能伸展到使用,而不是,我不相信这是由于GDI +的能力有限,在Windows窗体的替代品。
不隶属于 StackOverflow