TabRenderer без визуальных стилей включен?

Я хочу потянуть пользовательское TabControl с пользовательской функциональностью.

Чтобы сделать это, я наследовал класс Панели и метод overrided OnPaint для рисования с TabRenderer класс.

Проблема - это TabRenderer работа только, когда визуальные стили включили (может быть сверен TabRenderer.IsSupported), но что я должен сделать, если бы визуальные стили отключили?

В этом случае я думал с помощью ControlPaint класс для рисования вкладок без визуальных стилей но это не имеет никаких, рисуют методы, связанные с Вкладками. Я хочу, чтобы это в основном вело себя визуально как постоянный клиент TabControl.

6
задан DxCK 5 April 2010 в 11:03
поделиться

2 ответа

Вы должны нарисовать его самостоятельно, потому что для этого не существует опубликованного API. Надеюсь, это относительно легко сделать без визуальных стилей.

Вы можете нарисовать границу панели с помощью ControlPaint.DrawBorder3D и использовать что-то вроде следующего кода для кнопок:

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);
5
ответ дан 17 December 2019 в 04:44
поделиться

Это ответ "оттуда", но возможно ли, что вы могли бы использовать wpf? Как видно из ответа выше, настраивать элементы управления в winforms, где, как и в WPF, каждый элемент управления - это боль в ухе. Это означает, что вы полностью контролируете, что визуализируется и как это выглядит.

0
ответ дан 17 December 2019 в 04:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: