我有一个以 ComboBox 为模型的控件。我想呈现控件,使控件 border 看起来像标准的 Windows ComboBox。具体来说,我已经按照 MSDN 文档进行操作,除了禁用控件时的渲染外,控件的所有渲染都是正确的。
需要说明的是,这是针对启用了视觉样式 的系统。此外,除了禁用控件周围的边框外,控件的所有部分都正确呈现,它与禁用的 ComboBox 边框 颜色不匹配。
我正在使用 VisualStyleRenderer 类。 MSDN 建议对 ComboBox 控件的 TextBox 部分使用 VisualStyleElement.TextBox
元素,但标准的禁用 TextBox 和标准的禁用 ComboBox 绘制略有不同(一个具有浅灰色边框,另一个具有浅蓝色边框)。
如何在禁用状态下正确呈现控件?
最佳答案
我不是 100% 确定这是否是您要查找的内容,但您应该查看 System.Windows.Forms.VisualStyles 命名空间中的 VisualStyleRenderer。
- VisualStyleRenderer class (MSDN)
- How to: Render a Visual Style Element (MSDN)
- VisualStyleElement.ComboBox.DropDownButton.Disabled (MSDN)
如果用户没有启用视觉样式(他/她可能正在运行“经典模式”或 Windows XP 之前的操作系统),由于 VisualStyleRenderer 将无法工作,因此您应该始终回退到 ControlPaint 类。
// Create the renderer.
if (VisualStyleInformation.IsSupportedByOS
&& VisualStyleInformation.IsEnabledByUser)
{
renderer = new VisualStyleRenderer(
VisualStyleElement.ComboBox.DropDownButton.Disabled);
}
然后在画的时候这样做:
if(renderer != null)
{
// Use visual style renderer.
}
else
{
// Use ControlPaint renderer.
}
希望对您有所帮助!
关于c# - 如何在启用视觉样式的情况下将控件呈现为看起来像 ComboBox?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2874/