c# - Как да превърнем контрола, за да изглежда като ComboBox с активирани визуални стилове?

Translate

Имам контрол, който е моделиран на aComboBox. Искам да направя контрола, така че контролатаграницаизглежда като този на стандартWindows ComboBox. По-конкретно, следвах MSDN документацията и цялото изобразяване на контрола е правилно, с изключение на изобразяването, когато контролата е деактивирана.

За да бъде ясно, това е за система сВизуални стиловеактивиран. Също така всички части на контрола се изобразяват правилно, с изключение на границата около деактивиран контрол, който не съвпада с деактивиранияComboBox границацвят.

ИзползвамVisualStyleRendererклас. MSDN предлага използването наVisualStyleElement.TextBoxелемент заТекстово полечаст отComboBoxконтрол, но стандартно деактивиранТекстово полеи стандартно деактивираноComboBoxнарисувайте малко по различен начин (единият има светлосива граница, а другият светлосиня граница).

Как мога да получа правилно изобразяване на контрола в деактивирано състояние?

This question and all comments follow the "Attribution Required."

Всички отговори

Translate

Не съм 100% сигурен дали това е, което търсите, но трябва да разгледатеVisualStyleRendererв System.Windows.Forms.VisualStyles-пространство от имена.

  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.
}

Надявам се да помогне!

източник
Translate

Има ли някой отControlPaintметоди, полезни за това? Това обикновено използвам за персонализирани визуализирани контроли.

източник