C# 没有启用视觉样式的TabRenderer?

C# 没有启用视觉样式的TabRenderer?,c#,.net,winforms,visual-styles,C#,.net,Winforms,Visual Styles,我想画一个带有自定义功能的自定义TabControl 为此,我继承了Panel类并重写了OnPaint方法,以使用TabRenderer类进行绘制 问题是TabRenderer仅在启用视觉样式时工作(可以使用TabRenderer.IsSupported进行检查),但是如果禁用视觉样式,我该怎么办 在本例中,我想使用ControlPaint类来绘制没有视觉样式的选项卡,但它没有与选项卡相关的绘制方法。我希望它基本上在视觉上表现得像常规的TabControl一样,您必须自己绘制它,因为没有为此发布

我想画一个带有自定义功能的自定义
TabControl

为此,我继承了Panel类并重写了OnPaint方法,以使用
TabRenderer
类进行绘制

问题是
TabRenderer
仅在启用视觉样式时工作(可以使用
TabRenderer.IsSupported
进行检查),但是如果禁用视觉样式,我该怎么办


在本例中,我想使用
ControlPaint
类来绘制没有视觉样式的选项卡,但它没有与选项卡相关的绘制方法。我希望它基本上在视觉上表现得像常规的
TabControl

一样,您必须自己绘制它,因为没有为此发布的API。希望这是相对容易做到的非视觉方式

您可以使用绘制窗格边框,并对按钮使用类似于以下代码的代码:

int Top = bounds.Top;
int Bottom = bounds.Bottom - 1;
int Sign = 1;

if (tabStrip.EffectiveOrientation == TabOrientation.Bottom)
{
    Top = bounds.Bottom - 1;
    Bottom = bounds.Top;
    Sign = -1;
}

using (Pen OuterLightBorderPen = new Pen(SystemColors.ControlLightLight))
{
    e.Graphics.DrawLine(OuterLightBorderPen, bounds.Left, Bottom, bounds.Left, Top + 2 * Sign);
    e.Graphics.DrawLine(OuterLightBorderPen, bounds.Left, Top + 2 * Sign, bounds.Left + 2, Top);
    e.Graphics.DrawLine(OuterLightBorderPen, bounds.Left + 2, Top, bounds.Right - 3, Top);
}

using (Pen InnerLightBorderPen = new Pen(SystemColors.ControlLight))
{
    e.Graphics.DrawLine(InnerLightBorderPen, bounds.Left + 1, Bottom, bounds.Left + 1, Top + 2 * Sign);
    e.Graphics.DrawLine(InnerLightBorderPen, bounds.Left + 2, Top + 1 * Sign, bounds.Right - 3, Top + 1 * Sign);
}

using (Pen OuterDarkBorderPen = new Pen(SystemColors.ControlDarkDark))
{
    e.Graphics.DrawLine(OuterDarkBorderPen, bounds.Right - 2, Top + 1 * Sign, bounds.Right - 1, Top + 2 * Sign);
    e.Graphics.DrawLine(OuterDarkBorderPen, bounds.Right - 1, Top + 2 * Sign, bounds.Right - 1, Bottom);
}

using (Pen InnerDarkBorderPen = new Pen(SystemColors.ControlDark))
    e.Graphics.DrawLine(InnerDarkBorderPen, bounds.Right - 2, Top + 2 * Sign, bounds.Right - 2, Bottom);

这是一个“现成的”答案,但您是否可以使用wpf?从上面的答案可以看出,在winforms中定制控件是一件痛苦的事情,而在WPF中,每个控件都是无外观的。这意味着您可以控制渲染的内容及其完整的外观。

您希望自定义的
TabControl
System.Windows.Forms.TabControl
有什么不同?允许将动画作为选项卡的图标,允许在每个选项卡上自定义淹没X按钮,当tab控件不适合控件宽度时,更改左右按钮的位置和图形,允许右键单击选项卡,允许使用鼠标中键关闭,允许拖放tabpages。。。我想要在功能上与firefox类似的标签。你可以使用SystemPens来简化这一点-谢谢你的建议,但我需要支持windows 2000,所以WPF现在不是我的选择。