Краткий ответ: Нет, это невозможно.
Более длинный (и более точный) ответ:
К сожалению, это далеко не такпросто, как установка свойства.Причина в том, что полосы прокрутки, используемые элементом управления ListView
, не являются фактическими элементами управления полосы прокрутки.У них нет собственных оконных дескрипторов, а их рисование полностью управляется с помощью элемента управления ListView
.И, конечно же, элемент управления ListView
в WinForms является просто тонкой оболочкой для того же элемента управления, предоставляемого Win32 API.Ни один из них не предоставляет возможности для изменения цвета полосы прокрутки.
Но сюжет сгущается.Я сказал, что элемент управления ListView
(обратите внимание, что это также относится к TreeView
) обрабатывает сами полосы прокрутки, которые должны указывать, что вы не можете просто обработать его событие Paint
и нарисовать их сами, как вы можете с помощьюмногие другие элементы управления WinForms.Событие Paint
соответствует оконному сообщению WM_PAINT
, но есть другое сообщение (WM_NCPAINT
), которое отправляется окну, когда его не клиентская область должна быть закрашена.Само собой разумеется, что полосы прокрутки окрашиваются при получении сообщения WM_NCPAINT
, потому что я сказал, что они являются частью кадра элемента управления ListView
.Но это не так.
Тогда возникает проблема бессмысленной чрезмерной настройки.Я решительный сторонник приложений, которые уважают текущие настройки темы пользователя.Если у меня Windows настроена на использование высококонтрастной темы (или если я просто не могу выдержать синий цвет, поэтому вместо этого у меня есть зеленая тема), я ожидаю, что приложения на моем компьютере начнут рисовать свои элементы пользовательского интерфейса, используя эту тему.Как бы вы ни создавали свою полосу прокрутки, какой бы удивительной она ни была на вашем компьютере, она гарантированно будет выглядеть как мусор на чьем-то компьютере.Если это кто-то из ваших пользователей, упс.Горстка приложений, использующих пользовательские темы, выполняет много тестирования, и это все еще не удерживает их от проблем.
Вы могли бы быть в состоянии перехватитьСами полосы прокрутки как-то, но это, скорее всего, исключено, поскольку они частично реализованы в режиме ядра.На самом деле, я слышал, что авторы WindowBlinds утверждали, что перехватить полосы прокрутки было самым трудным делом, которое они должны были сделать.И они, конечно, не делятся ни одним из своих приемов.
Единственное, что действительно кажется обнадеживающим, - это Custom Scrollbar Library Джеймса Брауна , но она написана на C. Вы по своему усмотрениюпортирование это на C #.И как обычно с такими вещами, без проблем не обойтись.Чтение комментариев показывает довольно много людей с различными проблемами.Если вы не очень хорошо знакомы с Win32 API, вы, вероятно, не сможете исправить какие-либо ошибки, которые потенциально могут возникнуть в вашем приложении.
Существует причина, по которой поиск в Google по этой теме почти полностью раскрывается.неотвеченные вопросы.Для чего это стоит, это способ проще в WPF.