Используя C # winforms, я хочу создать пользовательские элементы управления, которые выглядят как настоящие.
Существует множество классов, которые можно использовать для рисования элементов управления, которые выглядят как настоящие: ControlPaint
,VisualStyleRenderer
, ButtonRenderer
, CheckBoxRenderer
, ComboBoxRenderer
, GroupBoxRenderer
, ProgressBarRenderer
, RadioButtonRenderer
, ScrollBarRenderer
, TabRenderer
, TextBoxRenderer
, TextRenderer
, ToolStripProfessionalRenderer
, ToolStripRenderer
, ToolStripSystemRenderer
, TrackBarRenderer
.
Проблемы, возникающие при рассмотрении визуальных стилей: я хочу быть независимым от визуальных стилей.Значение: мне все равно, если пользователь разрешает визуальные стили или нет, я хочу, чтобы это работало.если пользователь включил визуальные стили, я хочу нарисовать его, используя визуальные стили, иначе я хочу нарисовать его без визуальных стилей.
Согласно документации MSDN, единственные классы, которые не зависят от визуальных стилей, ButtonRenderer
, CheckBoxRenderer
, GroupBoxRenderer
, RadioButtonRenderer
.Это означает, что во всех других случаях мне нужно проверить себя, включены ли визуальные стили, и использовать другой код для рисования частей.
Предположим, я хочу нарисовать элементы управления Tab самостоятельно.Класс TabRenderer
обладает всеми необходимыми для этого функциями, но работает, только если пользователь включил визуальные стили.в противном случае мне нужно использовать ControlPaint
класс для рисования, но он использует совершенно другую модель, нет метода ControlPaint.DrawTab()
или чего-то в этом роде, и мне нужно выяснить, какие типы прямоугольников мне нужно нарисовать, чтобы он выглядел какреальная вкладка.это раздражает.
Встроенные элементы управления, включая элемент управления Tab, уже имеют эту функцию рисования сами с визуальными стилями или без них.Почему Microsoft не предоставляет эту функциональность создателям пользовательских элементов управления?Почему создатели пользовательского контроля должны страдать?