Как заставить Glass Button игнорировать градиент формы? - PullRequest
0 голосов
/ 29 февраля 2012

Здесь есть действительно отличный код для стеклянной кнопки: http://www.lukesw.net/articles/GlassButton.aspx

Единственная проблема, с которой я сталкиваюсь с этой кнопкой, состоит в том, что, если я применяю градиент к своим формам, это влияет на цвет кнопки, так что это не совсем то, что я выбрал во время разработки. Я не знаю, вызывает ли это код, который я использую, чтобы применить градиент формы, или кнопка не совсем непрозрачна или что. Я попытался немного поиграться с кодом кнопки, но ничего не получилось. Вы можете получить код для кнопки по ссылке, которую я разместил выше. Ниже приведен код, который я использую для градиента формы, который сейчас находится в самой форме:

    private Color _Color1 = Color.Gainsboro;
    private Color _Color2 = Color.Blue;
    private float _ColorAngle = 60f;

    public Color Color1
    {

        get { return _Color1; }
        set {
            _Color1 = value;
            this.Invalidate(); // Tell the Form to repaint itself
        }
    }

    public Color Color2
    {
        get { return _Color2; }
        set {
            _Color2 = value;
            this.Invalidate(); // Tell the Form to repaint itself
        }
    }

    public float ColorAngle
    {
        get { return _ColorAngle; }
        set {
            _ColorAngle = value;
            this.Invalidate(); // Tell the Form to repaint itself
        }
    }

    protected override void OnPaintBackground(PaintEventArgs pevent)
    {
        Graphics g = pevent.Graphics;
        Rectangle rBackground = new Rectangle(0, 0, this.Width, this.Height);

        System.Drawing.Drawing2D.LinearGradientBrush bBackground
            = new System.Drawing.Drawing2D.LinearGradientBrush(rBackground,
                                              _Color1, _Color2, _ColorAngle);

        g.FillRectangle(bBackground, rBackground);
        bBackground.Dispose();
    }

Будем весьма благодарны за любые указания о том, как заставить эту кнопку отображать то же самое во время выполнения, что и во время разработки!

1 Ответ

2 голосов
/ 29 февраля 2012

В методе DrawButtonBackground в GlowButton.cs просто измените непрозрачность на полностью непрозрачную (255):

#region " content "
using (GraphicsPath bb = CreateRoundRectangle(rect, 2))
{
    //int opacity = pressed ? 0xcc : 0x7f;
    int opacity = 255;
    using (Brush br = new SolidBrush(Color.FromArgb(opacity, backColor)))
    {
        g.FillPath(br, bb);
    }
}
#endregion
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...