Градиент WinForms (изображение или код) - событие OnDraw - PullRequest
1 голос
/ 19 июля 2010

Хорошо, я начинаю зацикливаться на своем дизайне и правильно понимаю стиль.

Моя тема использует графический интерфейс в стиле kryptonForm, но kyryptonForms не имеют предварительно разработанного ListView, поэтому мне приходится создавать его самостоятельно

Мое приложение - это система обмена сообщениями, основанная на XMPP / Jabber, так что вы можете догадаться, как бы я хотел, чтобы мой список контактов был разработан.

Я выполнил большую часть позиционирования, но я борюсь за стилизацию каждого ряда контактов.

Я собираюсь создать прозрачный оверлейный симулятор для списка контактов MSN Live messenger

Вот мой код OnDraw Event atm, и я изо всех сил пытаюсь найти лучший способ сделать градиент

private void ContactItem_OnPaintDraw(object sender, DrawListViewItemEventArgs e)
    {

        Rectangle ImageRect = e.Bounds;
        ImageRect.Inflate(-2, -2);
        ImageRect.Width = 32;

        Rectangle TextRect = e.Bounds;
        TextRect.X = ImageRect.Right + 2;
        TextRect.Width = e.Bounds.Width - TextRect.X;

        Rectangle IconRect = TextRect;
        IconRect.Inflate(-1, 0);
        IconRect.Y = ImageRect.Bottom - 16;
        IconRect.Width = 16;
        IconRect.Height = 16;

        if ((e.State & ListViewItemStates.Selected) != 0)
        {
            // Draw the background and focus rectangle for a selected item.
            e.Graphics.FillRectangle(ContactListBackgroundBrush, e.Bounds);
            e.DrawFocusRectangle();
        }
        else
        {
            // Draw the background for an unselected item.
            e.Graphics.FillRectangle(Brushes.White, e.Bounds);
        }

        if (ListViewContacts.View != View.Details)
        {

            e.Graphics.DrawImage((Image)Resources.UserIconDefault, ImageRect);

            TextRenderer.DrawText(e.Graphics, e.Item.Text, e.Item.Font, TextRect, e.Item.ForeColor, TextFormatFlags.GlyphOverhangPadding);
        }
    }

И ContactListBackgroundBrush var похож на

private Brush ContactListBackgroundBrush = new SolidBrush(Color.FromArgb(33, 162, 191));

это то, что мне нужно преобразовать в элемент стиля

альтернативный текст http://screensnapr.com/u/yeq8o0.png

Im Ищу этот выделенный стиль без импорта каких-либо конкретных файлов Windows 7 DLL, так как приложение также используется для Windows XP.

Надеюсь, вы, ребята, можете мне помочь:)

1 Ответ

1 голос
/ 20 июля 2010

Вы можете определить кисть как LinearGradientBrush, ищите документацию msnd . Это ИМХО лучший способ рисовать градиенты ..

...