Изменение границы ToolStripComboBox с помощью плоского стиля

Я хотел бы иметь возможность изменять цвет границы элементов управления ToolStripComboBox в некоторых моих полосах инструментов, поскольку цвет границы по умолчанию для полей со списком при использовании с плоским стилем — SystemColors.Window, который в основном невидим на фоне цвета элемента управления по умолчанию. панели инструментов. После долгих поисков в Reflector я не вижу очевидного способа сделать это, поскольку вся инфраструктура рендеринга ComboBox надежно защищена внутренними и частными интерфейсами.

Помимо ToolStrips, обычное решение, которое я видел для исправления цвета границы в ComboBox, — это создание подкласса ComboBox, переопределение WndProc и ручное окрашивание границы. Это не может работать для элементов управления ToolStripComboBox, поскольку внутренний элемент управления ComboBox является собственным частным подклассом ComboBox, и я не вижу способа заменить экземпляр элемента управления.

Альтернативное решение, которое я рассматриваю, — поместить один из расширенных объектов ComboBox в ToolStripControlHost, что позволит мне рисовать границу, но тогда мне придется отказаться от некоторых профессиональных настроек рендерера. Вторичный недостаток, который я заметил, заключается в том, что я иногда мерцаю при наведении курсора.

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

Есть ли у кого-нибудь умное решение для решения этой проблемы, или существует ли существующая (разрешенно лицензированная) повторная реализация стека рендеринга в плоском стиле ComboBox в дикой природе, которая устраняет некоторые недостатки в существующей реализации? ?

5
задан John Saunders 14 December 2013 в 21:05
поделиться