2012-04-23 2 views
0

Я создаю пользовательский ComboBox, который позволяет пользователю выбирать дату; дисплей календаря локализован, что делает встроенный DateTimePicker нежелательным [см. here для получения дополнительной информации]. Мне нужен элемент управления пользовательского интерфейса, чтобы отразить внешний вид и существующие компоненты. Вот что я пытался и проблемы, я столкнулся:Custom DateTimePicker: получение последовательного внешнего вида

  • Использование в TextBox с обнаженным ComboBox кнопку: Я попытался с помощью ComboBoxRenderer.DrawDropDownButton, но внешний вид не отражает существующие элементы управления пользовательского интерфейса. В частности, у нас нет Application.EnableVisualStyles(), поэтому кнопки имеют внешний вид Windows 98. ComboBoxRenderer рисует глянцевую серую кнопку.
  • Использование ComboBox и ToolStripDropDown для управления календаря: кнопка имеет правильный внешний вид, но я не могу полностью скрыть раскрывающееся окно. Несмотря на то, что ToolStripControlHost эффективно скрывает раскрывающийся список, когда я нажимаю кнопку, я вижу, что выпадающее поле отображается только перед отображением ToolStripDropDown. Я пробовал обходные пути, которые эффективно отключили раскрывающийся список, но кнопка, как и следовало ожидать, не поддерживает желаемое визуальное состояние нажатия (и рисование кнопки возвращает мне проблему в вышеуказанной точке). Установка высоты выпадающего окна до нуля в OnMeasureItem не работает; хотя я полагаю, что я мог бы сделать раскрывающийся ящик той же высотой, что и мой календарный пользовательский интерфейс, чтобы рендеринг выглядел не очень плохо.

Есть ли существующие механизмы, чтобы получить поведение мне нужно: TextBox, который отображает выбранную дату с падением кнопки со стрелкой вниз, при нажатии, отображает компонент календарь выбора пользовательского интерфейса. Компонент календаря уже существует, и кнопка должна выглядеть как существующие кнопки Windows 98 и кнопки ComboBox.

Спасибо за ваше время и помощь.

ответ

0

Я не смог найти прозрачный раствор, поэтому я реализовал обходной путь: Я взял скриншот кнопки в стиле Windows 98. В нормальной и нажимается состояния (не существует hover state) и добавил их как ресурс изображения (в файле resx). Затем я рисую изображение в соответствии с текущим взаимодействием с пользователем. Это имеет несколько последствий, в том числе: любые изменения в визуальном стиле не будут плавными, и если высота управления будет изменена, кнопка не будет изменяться, как и другие ComboBox экземпляров.

Смежные вопросы