Как сделать элемент управления похожим на ComboBox с включенными визуальными стилями?
У меня есть элемент управления, который моделируется ComboBox. Я хочу отобразить элемент управления таким образом, чтобы элемент управления border выглядел как стандартный Windows ComboBox. В частности, я следил за документацией MSDN, и вся обработка элемента управления правильная, за исключением рендеринга, когда элемент управления отключен.
Просто, чтобы быть ясным, это для системы с Визуальные стили. Кроме того, все части элемента управления отображаются правильно, за исключением границы вокруг отключенного элемента управления, которая не соответствует отключенному цвету ComboBox.
Я использую класс VisualStyleRenderer. MSDN предлагает использовать элемент VisualStyleElement.TextBox
для TextBox части элемента управления ComboBox, но стандартный отключенный TextBox и стандартный отключенный ComboBox рисуем немного по-другому (у одного есть светло-серая граница, а другая - светло-голубая рамка).
Как получить правильное отображение элемента управления в отключенном состоянии?
Ответы
Ответ 1
Я не уверен на 100%, если это то, что вы ищете, но вы должны проверить VisualStyleRenderer в пространстве имен System.Windows.Forms.VisualStyles.
Так как 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.
}
Надеюсь, что это поможет!
Ответ 2
Используются ли какие-либо из ControlPaint методы? Это то, что я обычно использую для настраиваемых элементов управления.