У меня есть элемент управления TrackBar на TabPage внутри TabControl. Фон TrackBar отображается серым, а TabPage - белым. Невозможно установить прозрачность свойства BackColor TrackBar, и я не могу переопределить рисунок, потому что для TrackBar нет свойства DrawMode. Какие варианты у меня есть, чтобы подогнать TrackBar? Почему он не поддерживает визуальные стили?
Фон трекбара в TabControl
Ответы (4)
Возможно, вам стоит взглянуть на проект TransparentTrackBar на CodePlex.
person
Phil Price
schedule
17.03.2009
Я надеялся использовать встроенные элементы управления, чтобы уменьшить зависимости. Я не могу понять, почему встроенный элемент управления не поддерживает визуальные стили.
- person Jon Tackabury; 17.03.2009
Простой
class MyTransparentTrackBar : TrackBar
{
protected override void OnCreateControl()
{
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
if (Parent != null)
BackColor = Parent.BackColor;
base.OnCreateControl();
}
}
Я также столкнулся с этим (нужна была трекбар с прозрачным фоном на вкладке, которая будет работать как с включенными, так и с отключенными визуальными стилями). И это сработало для меня.
person
Alex from Jitbit
schedule
17.04.2011
Я обнаружил, что редактор визуальных форм начал добавлять код для установки BackColor на Color.Transparent, который давал ошибки во время выполнения. Чтобы обойти это, я добавил следующее
public new Color BackColor { get { return base.BackColor; } set { if (value != Color.Transparent) { base.BackColor = value; } } }
- person Colin; 13.03.2015
Не мешал бы здесь, но ни одно из приведенных выше предложений не помогло мне. При чем тут прикол были следующие строчки:
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.
person
Shockwaverider
schedule
26.07.2011
Кажется, очевидным решением является установка BackColor TrackBar на System-ControlLightLight.
(Но проблема с очевидным решением вопроса четырехлетней давности заключается в том, что он, вероятно, подразумевает, что я что-то неправильно понял.)
person
RenniePet
schedule
19.02.2013