5

我在 TabControl 内的 TabPage 上有一个 TrackBar 控件。TrackBar 的背景被绘制为灰色,而 TabPage 被绘制为白色。无法将 TrackBar 的 BackColor 属性设置为透明,也无法覆盖绘图,因为 TrackBar 没有 DrawMode 属性。我必须有哪些选项才能使 TrackBar 适合?为什么它不支持视觉样式?

4

4 回答 4

2

简单的

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

        base.OnCreateControl();
    }
}

我也遇到过这个问题(需要一个标签控件上的透明背景轨迹栏,它可以在启用和禁用视觉样式的情况下工作)。这对我有用。

于 2011-04-17T09:27:22.527 回答
2

不会在这里干涉,但上述建议都不适合我。诀窍是以下几行:

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

所以我基本上从背景颜色中消除了alpha通道。不过,仍然需要使用 Vista 和 Win 7 进行测试。

于 2011-07-26T07:46:05.680 回答
1

您可能想查看 CodePlex 上的TransparentTrackBar项目。

于 2009-03-17T02:54:03.827 回答
-1

显而易见的解决方案似乎是将 TrackBar 的 BackColor 设置为 System-ControlLightLight。

(但是对于四年前的问题有一个明显的解决方案的问题是,它可能暗示我误解了一些东西。)

于 2013-02-19T20:34:42.167 回答