визуальные стили независимый рисунок - PullRequest
4 голосов
/ 14 августа 2010

Используя 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 не предоставляет эту функциональность создателям пользовательских элементов управления?Почему создатели пользовательского контроля должны страдать?

1 Ответ

0 голосов
/ 14 августа 2010

К сожалению, это боль, но это стоимость написания пользовательских элементов управления. Я видел, как Microsoft делает это во многих элементах управления WinForm, проверяя Application.RenderWithVisualStyes и Control.UseVisualStyleBackColor. В зависимости от этих значений они соответственно раскрасят элемент управления.

Общий шаблон, который они используют, - это создание внутренних классов MyControlRenderer.cs. Внутри этого рендерера действительно происходит волшебство. Если вы посмотрите на код NET REF, то увидите, что они также используют класс VisualStyleRenderer из пространства имен System.Windows.Forms.VisualStyles, а также есть некоторый фактический код рисования.

Вам нужно будет использовать сочетание этих различных классов и инструментов, а также сочетание выполнения своей собственной работы. Тестирование управления на машине с визуальными стилями и без них.

Когда я надеюсь вернуться домой с работы, я опубликую немного больше.

...