Как сделать элемент управления похожим на ComboBox с включенными визуальными стилями?

У меня есть элемент управления, который моделируется на ComboBox . Я хочу отобразить элемент управления так, чтобы граница элемента управления была похожа на стандартную область Windows ComboBox . В частности, я следовал документации MSDN, и вся визуализация элемента управления является правильной, за исключением визуализации, когда элемент управления отключен.

Просто чтобы быть понятным, это для системы с включенными визуальными стилями . Кроме того, все части элемента управления отображаются правильно, за исключением границы вокруг отключенного элемента управления, который не соответствует цвету отключенной границы ComboBox .

Я использую класс VisualStyleRenderer . MSDN предлагает использовать VisualStyleElement.TextBoxэлемент для части TextBox элемента управления ComboBox, но стандартный отключенный TextBox и стандартный отключенный ComboBox рисуют немного по-другому (один имеет светло-серую рамку, другой - голубую).

Как я могу получить правильный рендеринг элемента управления в отключенном состоянии?

5.08.2008 21:19:57
2 ОТВЕТА

Являются ли какие-либо методы ControlPaint полезными для этого? Это то, что я обычно использую для пользовательских элементов управления.

1
16.08.2008 19:58:44

Я не уверен на 100%, если это то, что вы ищете, но вы должны проверить VisualStyleRenderer в пространстве имен System.Windows.Forms.VisualStyles-name.

  1. Класс VisualStyleRenderer (MSDN)
  2. Как визуализировать элемент визуального стиля (MSDN)
  3. VisualStyleElement.ComboBox.DropDownButton.Disabled (MSDN)

Так как VisualStyleRenderer не будет работать, если у пользователя не включены визуальные стили (он может работать в «классическом режиме» или в операционной системе до Windows XP), у вас всегда должен быть запасной вариант к классу ControlPaint.

// Create the renderer.
if (VisualStyleInformation.IsSupportedByOS 
    && VisualStyleInformation.IsEnabledByUser) 
{
    renderer = new VisualStyleRenderer(
        VisualStyleElement.ComboBox.DropDownButton.Disabled);
}

а затем сделать так при рисовании:

if(renderer != null)
{
    // Use visual style renderer.
}
else
{
    // Use ControlPaint renderer.
}

Надеюсь, это поможет!

11
6.03.2011 08:23:04