Frage

ist es eine Möglichkeit, einen Schlagschatten auf Steuerelemente hinzufügen?

Gibt es Kontrollen gibt, mit dieser Funktion?

War es hilfreich?

Lösung

Diese Frage ist seit 6 Jahren und muss eine Antwort. Ich hoffe, dass jeder, der dies tun muss, kann eine Antwort für jeden Steuersatz von meiner Lösung extrapolieren. Ich hatte einen Panel und wollte einen Schlagschatten unter jedem Kind Kontrolle ziehen -. In diesem Fall eines oder mehr Platten (aber die Lösung sollte gut für andere Steuerart mit einigen geringfügigen Änderungen am Code halten)

Wie der Schlagschatten für eine Kontrolle hat auf der Oberfläche des Behälters, dass diese Kontrolle gezogen werden wir zunächst eine Funktion, um den Behälter Paint Hinzufügen () Ereignis.

Container.Paint += dropShadow;

dropshadow () sieht wie folgt aus:

    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++;
                }
            }
        }
    }

Selbstverständlich können Sie eine andere Steuerart aus der Sammlung des Containers holen und Sie die Farbe und Tiefe des Schattens mit einigen kleineren Verbesserungen variieren können.

Andere Tipps

Sie haben die CreateParamsproperty wie diese zu überschreiben:

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;
    }
}

in WPF Es ist, wenn Sie, dass anstelle der Verwendung strecken können, ich glaube nicht, gibt es eine Alternative in Windows Forms aufgrund der begrenzten Möglichkeiten von GDI +.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top