【发布时间】:2009-02-20 11:47:44
【问题描述】:
我可以使用 ControlPaint.DrawBorder3D 绘制 3D 边框,但我得到的是“Windows 经典”3D 边框。我想绘制当前主题的 3D 边框——在默认的 XP 主题中,这是一个 1px 的蓝色或灰色边框。我如何绘制它,以及如何获得它的宽度?
【问题讨论】:
标签: c# .net winforms visual-styles
我可以使用 ControlPaint.DrawBorder3D 绘制 3D 边框,但我得到的是“Windows 经典”3D 边框。我想绘制当前主题的 3D 边框——在默认的 XP 主题中,这是一个 1px 的蓝色或灰色边框。我如何绘制它,以及如何获得它的宽度?
【问题讨论】:
标签: c# .net winforms visual-styles
听起来你可能需要看看System.Windows.Forms.VisualStyles.VisualStyleRenderer:
System.Windows.Forms.VisualStyles命名空间暴露VisualStyleElement代表所有的对象 控件和用户界面 (UI) 视觉支持的元素 样式。绘制或获取信息 关于特定元素,您必须 将VisualStyleRenderer设置为 您感兴趣的元素。要绘制一个元素,请使用
DrawBackground方法。这VisualStyleRenderer类也 包括方法,例如GetColor和GetEnumValue,提供信息 关于元素是如何定义的 当前的视觉风格。
该页面上还有一个代码示例。
您必须自己绘制边框,但是您可以从VisualStyleElement.Window.Caption.Active 获取颜色,并且大小应该是窗口框架的大小(我相信),即VisualStyleElement.Window.FrameBottom.Active。如果您探索VisualStyleElement.Window,您应该能够确定哪个窗口元素具有绘制边框所需的信息。
【讨论】:
.NET Framework 2.0 之前的答案
我假设您正在绘制自己的特殊控件,并且您想使用当前活动主题的元素来绘制它,以便它更适合标准 XP 控件。例如,您不试图在标准 Button 控件上启用主题。对吗?
实际上有点复杂。您的主要关注点应该是 UxTheme.dll。这包含了绘制主题控件所需的一切。 Here 是一个很好的 C# 包装器,可以让你的生活更轻松。还有其他的,所以如果这不是您想要的,我希望我已经为您指明了正确的方向。
【讨论】: