Вопрос

У меня есть элемент управления TrackBar на TabPage внутри TabControl.Фон TrackBar отображается серым цветом, а TabPage — белым.Невозможно установить прозрачность для свойства BackColor TrackBar, и я не могу переопределить рисунок, поскольку для TrackBar не существует свойства DrawMode.Какие параметры мне нужны для установки TrackBar?Почему он не поддерживает визуальные стили?

Это было полезно?

Решение

Возможно, вы захотите взглянуть на проект TransparentTrackBar в CodePlex.

Другие советы

Простой

class MyTransparentTrackBar : TrackBar
{
    protected override void OnCreateControl()
    {
        SetStyle(ControlStyles.SupportsTransparentBackColor, true);
        if (Parent != null)
            BackColor = Parent.BackColor;

        base.OnCreateControl();
    }
}

Я также столкнулся с этим (нужна была панель отслеживания с прозрачным фоном на вкладке, которая будет работать как с включенными, так и с отключенными визуальными стилями).И это сработало для меня.

Не вмешивался бы здесь, но ни одно из вышеупомянутых предложений не работало для меня. Что сделали трюк были следующие строки:

private const int WM_DWMCOMPOSITIONCHANGED = 0x031A;
private const int WM_THEMECHANGED = 0x031E;

protected override void OnVisibleChanged(EventArgs e)
{
    Color color = this.BackColor;
    trackBarQuality.BackColor = Color.FromArgb(color.R, color.G, color.B);
}

protected override void WndProc(ref Message m)
{
    if (m.Msg == WM_DWMCOMPOSITIONCHANGED || m.Msg == WM_THEMECHANGED)
        OnVisibleChanged(new EventArgs());

    base.WndProc(ref m);
}

Поэтому я в основном исключаю альфа-канал из цвета фона. Тем не менее, все еще нужно проверить это с Vista и Win 7.

Очевидное решение, по-видимому, состоит в том, чтобы установить BackColor TrackBar в System-ControlLightLight.

(Но проблема с очевидным решением четырехлетнего вопроса состоит в том, что это, вероятно, подразумевает, что я что-то неправильно понял.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top