所以我正在为我的应用程序做一个暗模式选项,我希望滚动条的背景颜色也能改变颜色,这样它看起来就不会不合适了。我试着寻找一个解决方案,但到目前为止我只找到了控件中的滚动条代码。但我需要改变面板的滚动条。有人碰巧知道如何做到这一点吗?非常感谢提前。
q9rjltbz1#
当我开始开发支持黑暗模式的自定义控件时,我也面临着同样的挑战。Panel控件和其他控件的问题是,它们的滚动条是由这些控件内部管理的,没有办法自定义它们。我的想法是创建一个支持自定义颜色和主题的自定义ScrollBar控件,请参阅我的答案https://stackoverflow.com/a/73613059/5514131在我们的自定义Panel控件中,我们在内部创建自定义ScrollBars,并使用各种Panel属性和事件将自定义ScrollBars链接到我们的Panel。借助PanelVerticalScroll和HorizontalScroll属性,我们可以知道默认的Panel滚动条是否可见,以及它们的属性是否要复制到我们的自定义滚动条中。借助LocationChanged、SizeChanged和其他Panel事件和属性,我们应该将自定义ScrollBar绑定到Panel,并将其放置在默认ScrollBar的顶部以完全覆盖它们。我使用OnMouseWheel和OnScroll在使用代码或鼠标滚轮滚动面板时更新我们的自定义滚动条。我们应该在释放Panel或销毁其句柄时释放自定义ScrollBars。我知道这不是最好的方法,但它应该工作,以防止默认丑陋的滚动条破坏你美丽的黑暗模式。这种变通方法可以应用于其他控件,我实际上是将它与TabControls一起使用的,但是,实现起来会更复杂。
具有基于Flat ScrollBar控件https://gist.github.com/ahmedosama007/39f8b76e65300e5969110b753fe0a654的自定义ScrollBar的Windows窗体面板控件
1条答案
按热度按时间q9rjltbz1#
当我开始开发支持黑暗模式的自定义控件时,我也面临着同样的挑战。Panel控件和其他控件的问题是,它们的滚动条是由这些控件内部管理的,没有办法自定义它们。
我的想法是创建一个支持自定义颜色和主题的自定义ScrollBar控件,请参阅我的答案https://stackoverflow.com/a/73613059/5514131
在我们的自定义Panel控件中,我们在内部创建自定义ScrollBars,并使用各种Panel属性和事件将自定义ScrollBars链接到我们的Panel。
借助PanelVerticalScroll和HorizontalScroll属性,我们可以知道默认的Panel滚动条是否可见,以及它们的属性是否要复制到我们的自定义滚动条中。
借助LocationChanged、SizeChanged和其他Panel事件和属性,我们应该将自定义ScrollBar绑定到Panel,并将其放置在默认ScrollBar的顶部以完全覆盖它们。
我使用OnMouseWheel和OnScroll在使用代码或鼠标滚轮滚动面板时更新我们的自定义滚动条。
我们应该在释放Panel或销毁其句柄时释放自定义ScrollBars。
我知道这不是最好的方法,但它应该工作,以防止默认丑陋的滚动条破坏你美丽的黑暗模式。
这种变通方法可以应用于其他控件,我实际上是将它与TabControls一起使用的,但是,实现起来会更复杂。
具有基于Flat ScrollBar控件https://gist.github.com/ahmedosama007/39f8b76e65300e5969110b753fe0a654的自定义ScrollBar的Windows窗体面板控件