Как применить визуальный стиль для классической темы Windows в форме Win, используя C # - PullRequest
0 голосов
/ 28 февраля 2011

Я использую VisualStyleRenderer для моего приложения Windows, он отлично работает для темы Windows XP, но не работает для темы Windows Classic. Кто-нибудь может подсказать мне, как я смогу сделать тему приложения поддерживаемой.

Обновление:

Позвольте мне описать это с четкой картиной. У меня есть представление списка, и в элементах списка я рисую кнопку с помощью класса VisualStyleRenderer, а также рисую область этой кнопки с использованием некоторого цвета градиента. Он работает в теме Windows XP, но пока я меняю тему на Windows Classic, эффект кнопки не появляется, который я нарисовал с помощью класса VisualStyleRenderer.

Любая помощь будет оценена

Заранее спасибо.

1 Ответ

4 голосов
/ 28 февраля 2011

Этого не произойдет. Для темы Windows Classic нет «визуальных стилей». Это то, что они имеют в виду под «Классикой»: это тема, которая использовалась в течение многих лет до изобретения визуальных стилей.

Тема Windows XP Luna - первая, которая поддерживает визуальные стили. Тема Aero , включенная в Windows Vista и 7, также поддерживает визуальные стили, хотя они выглядят немного иначе.

Если вы используете класс VisualStyleRenderer, как вы делаете, все будет рисовать в соответствии с темой, выбранной пользователем. Как вы сказали, все выглядит хорошо, когда вы выбираете тему Windows XP. Когда у вас выбрана классическая тема, все будет нарисовано с использованием классической темы. Это ожидаемое поведение; все остальное в системе тоже выглядит иначе.

Вам нужно будет проверить и проверить, поддерживаются ли визуальные стили, и если нет, использовать другой метод рисования. Здесь доступен образец на MSDN . Самое простое, что можно сделать - добавить оператор if, который оценивает значение, возвращаемое свойством Application.RenderWithVisualStyles . Если это правда, вы можете рисовать, используя класс VisualStyleRenderer. Если ложно, вам нужно пнуть его старой школы. Использование ControlPaint класса может быть хорошим способом сделать это.

...